Armando, yo he conseguido hacerlo as铆, pero solo para bitmaps tipo BMP de 24 bits (lo he probado con un bitmap peque帽o de 256X256, con m谩s grandes supong que fucionar谩 igual):
Necesitas tres campos en tu base d datos: ANCHO, ALTO y DATOS (de la imagen). los dos primeros num茅ricos y el 煤ltimo un MEMO.
FUNCTION Prueba()
聽 聽LOCAL oDlg
聽 聽LOCAL nWidth,nHeight
聽 聽LOCAL hBmp
聽 聽LOCAL cImg 聽:= CurDrive()+":\"+CurDir()+"\PAISAJE.bmp" 聽// imagen BMP de 24 bits
聽 聽*
聽 聽cImg := MEMOREAD( cImg )
聽 聽nWidth 聽= ASC(SubStr(cimg,19,1))+(ASC(SubStr(cimg,20,1))*256)+(ASC(SubStr(cimg,21,1))*65536)
聽 聽nHeight = ASC(SubStr(cimg,23,1))+(ASC(SubStr(cimg,24,1))*256)+(ASC(SubStr(cimg,25,1))*65536)
聽 聽cImg := SubStr(cImg,55) 聽// DATOS DE LA IMAGEN
聽 聽*
聽 聽hBmp := BuildImage( nWidth, nHeight, cImg )
聽 聽*
聽 聽DEFINE DIALOG oDlg 聽SIZE 350,350
聽 聽 聽 oDlg:bPainted := { |hDc| PaintPrb(hDc,hBmp) }
聽 聽ACTIVATE DIALOG oDlg CENTER
聽
聽 聽DeleteObject( hBmp )
RETURN NIL
*
FUNCTION PaintPrb(hDc,hBit)
聽 聽 PalBmpDraw( hDc,10,10,hBit)
RETURN NIL
Me explico: Carga la imagen como si fuera un TXT, con MEMOREAD(), calculas nWidth, nHeight y cImage como en el ejemplo y guarda nWidth en el campo ANCHO, nHeight en el campo ALTO y cImage en el MEMO DATOS.
Para reconstruir la imagen he creado la funci贸n en C++ (borland 5.5) BUILDIMAGE, este es el c贸digo.
HB_FUNC( BUILDIMAGE )聽 聽// BuildImage( nWidth, nHeight, cImage )
聽 {
聽 聽HDC 聽hDc1 = CreateCompatibleDC( NULL ) ;
聽 聽int nWidth 聽= hb_parni( 1 ) ;
聽 聽int nHeight = hb_parni( 2 ) ;
聽 聽LPSTR cImage = hb_parc( 3 ) ;
聽 聽BITMAPINFO bmi 聽 聽 ;
聽 聽HBITMAP 聽 聽hBitmap ;
聽 聽VOID 聽 聽 聽*pvBits 聽;
聽 聽int i,j,k,v ;
聽 聽int nQWidth = ((( nWidth * 24 + 31 ) & ~31 ) >> 3 ) ;
聽 聽bmi.bmiHeader.biSize聽= sizeof( BITMAPINFOHEADER ) ;
聽 聽bmi.bmiHeader.biWidth 聽 聽 聽 = nWidth 聽 聽 聽 聽 聽;
聽 聽bmi.bmiHeader.biHeight 聽 聽 聽= nHeight 聽 聽 聽 聽 ;
聽 聽bmi.bmiHeader.biPlanes 聽 聽 聽= 1 聽 聽 聽 聽 聽 聽 聽 ;
聽 聽bmi.bmiHeader.biBitCount 聽 聽= 24 聽 聽 聽 聽 聽 聽 聽 ;
聽 聽bmi.bmiHeader.biCompression = BI_RGB 聽 聽 聽 聽 聽 聽;
聽 聽bmi.bmiHeader.biSizeImage 聽 = nQWidth * nHeight 聽;
聽 聽hBitmap = CreateDIBSection( hDc1, &bmi, DIB_RGB_COLORS, &pvBits, NULL, 0 ) ;
聽 聽v = 0 ;
聽 聽for ( i = 0; i < nHeight; ++i )
聽 聽 聽 聽{
聽 聽 聽 聽k = i * nQWidth ;
聽 聽 聽 聽for ( j = 0; j < (nWidth*3); j += 3 )
聽 聽 聽 聽 聽 聽{
聽 聽 聽 聽 聽 聽( (BYTE *) pvBits )[k+j+0] = ( BYTE ) cImage[ v+0 ] ;
聽 聽 聽 聽 聽 聽( (BYTE *) pvBits )[k+j+1] = ( BYTE ) cImage[ v+1 ] ;
聽 聽 聽 聽 聽 聽( (BYTE *) pvBits )[k+j+2] = ( BYTE ) cImage[ v+2 ] ;
聽 聽 聽 聽 聽 聽v += 3 ;
聽 聽 聽 聽 聽 聽}
聽 聽 聽 聽}
聽 聽DeleteDC( hDc1 ) ;
聽 聽hb_retnl( ( LONG ) hBitmap ) ;
聽 聽}
A mi me funciona perfectamente.
Para compilar la funci贸n en C++ tendr谩s que utilizar las cabeceras pertinentes (alguien habr谩 que sepas cuales son). Lo que pasa es que yo lo he hecho incluyendo esa funci贸n en una librer铆a en la que tengo varias funciones de C++ y no se que cabeceras se utilizan para FWH con PRAGMA (nunca lo he heco).
Peaaaaaso de foro...
FWH 2007 - xHarbour - BCC55