FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour tImage: Image desde campo de DB
Posts: 128
Joined: Wed Oct 26, 2005 12:18 PM
tImage: Image desde campo de DB
Posted: Thu Mar 12, 2009 04:18 AM

He visto varios posts preguntando como mostrar imagenes guardadas en campos de una base.

La mayor铆a de las respuestas a estos post se basan en crear un archivo temporal.
Con Freeimage.dll esto puede hacerse directamente, pero deben descargar una versi贸n m谩s nueva que la que viene empaquetada con FWH.

La versi贸n de Freeimage.dll disponible actualmente es la 3.11.0. El link de descarga es:

http://freeimage.sourceforge.net/download.html

Ahora la soluci贸n para evitar el archivo temporal:

SINTAXIS:

REDEFINE IMAGE oImg ID 10 OF oDlg
oImg:LoadFromMemory(MyDB->FOTO)

Lo que hay que agregar a tImage es lo siguiente:
//----------------------------------------------------------------------------//
METHOD LoadFromMemory(cBuffer) //CEL 08-Nov-2008
local hOldBmp := ::hBitmap
local hOldPal := ::hPalette
if ! Empty( hOldBmp )
PalBmpFree( hOldBmp, hOldPal )
endif

::hBitmap:=FILoadFromMemory(cBuffer)
PalBmpNew( ::hWnd, ::hBitmap, ::hPalette )

return nil
//----------------------------------------------------------------------------//

define CBM_INIT 4

define DIB_RGB_COLORS 0

static Function FILoadFromMemory(cBuffer)
Local hMem, nFormat, nSize:=Len(cBuffer)
Local hDib, hInfoH, hInfo, hBits, hWnd, hBmp

#ifdef CLIPPER
hLib = LoadLib32( "freeimage.dll" )
#else
hLib = LoadLibrary( "freeimage.dll" )
#endif

if hLib <= 32
MsgStop( "Cannot load FreeImage.dll" )
return 0
endif
hMem := FI_OpenMemory(cBuffer, nSize)
nFormat:= FI_GetFileTypeFromMemory(hMem, 0)
hDib := FI_LoadFromMemory(nFormat, hMem, 0)
hInfoH := FIGETINFOHEADER( hDib )
hInfo := FIGETINFO( hDib )
hBits := FIGETBITS( hDib )
hWnd := GETDESKTOPWINDOW()

#ifdef CLIPPER
hDC = GETDC32( hWnd )
#else
hDC = GETDC( hWnd )
#endif

hBmp := CreateDiBitmap( hDC, hInfoH, CBM_INIT, hBits, hInfo, DIB_RGB_COLORS )

#ifdef CLIPPER
ReleaseDC32( hWnd, hDC )
#else
ReleaseDC( hWnd, hDC )
#endif

#ifdef CLIPPER
ReleaseDC32( hWnd, hDC )
#else
ReleaseDC( hWnd, hDC )
#endif

FI_CloseMemory(hMem)

#ifdef CLIPPER
FreeLib32( hLib )
#else
FreeLibrary( hLib )
#endif

return hBmp
//----------------------------------------------------------------------------//

DLL32 STATIC FUNCTION FI_OpenMemory(cData AS LPSTR, nSize AS LONG) AS LONG ;
PASCAL FROM "_FreeImage_OpenMemory@8" LIB hLib

DLL32 STATIC FUNCTION FI_LoadFromMemory(nFormat AS LONG,nStream AS LONG,nFlags AS LONG) AS LONG ;
PASCAL FROM "_FreeImage_LoadFromMemory@12" LIB hLib

DLL32 STATIC FUNCTION FI_CloseMemory(nStream AS LONG) AS LONG ;
PASCAL FROM "_FreeImage_CloseMemory@4" LIB hLib

DLL32 STATIC FUNCTION FI_GetFileTypeFromMemory(nStream AS LONG,nSize AS LONG ) AS LONG ;
PASCAL FROM "_FreeImage_GetFileTypeFromMemory@8" LIB hLib

La librer铆a viene con una excelente ayuda. Ya publiqu茅 un uso de ella para hacer un "crop" en una imagen archivada en viewtopic.php?f=6&t=14889.

Espero se animen a echar una ojeada a la ayuda de freeimage y a encontrar y publicar nuevos usos de ella.

Un saludo
C茅sar Lozada

Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Re: tImage: Image desde campo de DB
Posted: Thu Mar 12, 2009 12:11 PM

Buen aporte C茅sar,gracias. Lo he implementado en mi clase que hereda de tImage y funciona perfecto.
Quizas este nuevo metodo se podria unificar con el ya existente LoadFromString (tBitMap).

Saludos desde Mallorca
Biel Maim贸
http://bielsys.blogspot.com/
Posts: 3107
Joined: Fri Oct 07, 2005 06:28 PM
Re: tImage: Image desde campo de DB
Posted: Thu Mar 12, 2009 05:19 PM

HOw I can write the image on foto field ?

Best Regards, Saludos



Falconi Silvio
Posts: 128
Joined: Wed Oct 26, 2005 12:18 PM
Re: tImage: Image desde campo de DB
Posted: Fri Mar 13, 2009 12:07 AM

Silvio:

repla myDB->FOTO with MemoRead("myPhoto.jpg")

Posts: 3107
Joined: Fri Oct 07, 2005 06:28 PM
Re: tImage: Image desde campo de DB
Posted: Sun Mar 15, 2009 01:32 AM

is there a limit for sa ve a jpg on dbf

Best Regards, Saludos



Falconi Silvio
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: tImage: Image desde campo de DB
Posted: Sun Mar 15, 2009 08:59 AM

C茅sar,

Gracias por tan interesante aportaci贸n.

La hemos incluido en el pr贸ximo build de FWH :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion