tImage: Image desde campo de DB

tImage: Image desde campo de DB

Postby César E. Lozada » Thu Mar 12, 2009 4: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
User avatar
César E. Lozada
 
Posts: 128
Joined: Wed Oct 26, 2005 12:18 pm
Location: Los Teques, Miranda, Venezuela

Re: tImage: Image desde campo de DB

Postby Biel EA6DD » 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/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Re: tImage: Image desde campo de DB

Postby Silvio » Thu Mar 12, 2009 5:19 pm

HOw I can write the image on foto field ?
Best Regards, Saludos

Falconi Silvio
User avatar
Silvio
 
Posts: 3107
Joined: Fri Oct 07, 2005 6:28 pm
Location: Teramo,Italy

Re: tImage: Image desde campo de DB

Postby César E. Lozada » Fri Mar 13, 2009 12:07 am

Silvio:

repla myDB->FOTO with MemoRead("myPhoto.jpg")
User avatar
César E. Lozada
 
Posts: 128
Joined: Wed Oct 26, 2005 12:18 pm
Location: Los Teques, Miranda, Venezuela

Re: tImage: Image desde campo de DB

Postby Silvio » Sun Mar 15, 2009 1:32 am

is there a limit for sa ve a jpg on dbf
Best Regards, Saludos

Falconi Silvio
User avatar
Silvio
 
Posts: 3107
Joined: Fri Oct 07, 2005 6:28 pm
Location: Teramo,Italy

Re: tImage: Image desde campo de DB

Postby Antonio Linares » Sun Mar 15, 2009 8: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42099
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 56 guests