Am 16.03.2010 13:17, schrieb Adrian Veith: > Am 16.03.2010 11:22, schrieb Adrian Veith: > >> Am 16.03.2010 10:45, schrieb Matt Emson: >> >> >>> Adrian Veith wrote: >>> >>> >>>> ..the bitmaps look scrambled and have different colors. >>>> I haven't found the solution for this yet. >>>> >>>> >>> Ignore that last message. It seems WinCE is only ever little endian. >>> So it is probably more to do with DIB vs general device dependent >>> Bitmaps. Have you tried converting the bitmap in question to a DIB? >>> >>> >>> >> I am so far that I found that the procedure SetDIBits is not supported >> on WinCE (that's why it is commented out in the WinCE build). So the >> Bitmap is not initialized with the data loaded from the file and shows >> random crap. >> >> I have to find way how to initialize the bitmap without SetDIBits (and >> in a efficient way). >> >> Now my second solution works:
{$IFDEF wince} procedure WinCESetDibBits(BMP: HBITMAP; awidth, aheight: Integer; aimgdata: Pointer; var bi: TBitmapInfo); var hdcSrc, hdcDest: HDC; hbmSrc: HBITMAP; bm: BITMAP; begin hdcDest:= CreateCompatibleDC(0); SelectObject(hdcDest, BMP); if bi.bmiHeader.biBitCount = 1 then begin SetDIBitsToDevice(hdcDest, 0, 0, awidth, aheight, 0, 0, 0, aheight, aimgdata, bi, DIB_RGB_COLORS); end else begin hdcSrc:= CreateCompatibleDC(0); hbmSrc:= CreateBitmap(awidth, aheight, 1, bi.bmiHeader.biBitCount, aimgdata); SelectObject(hdcSrc, hbmSrc); BitBlt(hdcDest, 0, 0, awidth, aheight, hdcSrc, 0, 0, SRCCOPY); DeleteDC(hdcSrc); DeleteObject(hbmSrc); end; DeleteDC(hdcDest); end; {$ENDIF} and the change for TfpgGDIImage.DoInitImage: {$IFNDEF wince} SetDIBits(wapplication.display, FBMPHandle, 0, aheight, aimgdata, bi, DIB_RGB_COLORS); {$else} WinCESetDibBits(FBMPHandle, awidth, aheight, aimgdata, bi); {$ENDIF} and for TfpgGDIImage.DoInitImageMask {$IFNDEF wince} SetDIBits(wapplication.display, FMaskHandle, 0, aheight, aimgdata, pbi^, DIB_RGB_COLORS); {$ELSE} WinCESetDibBits(FMaskHandle, awidth, aheight, aimgdata, pbi^); {$ENDIF} with the patch for loading 32bit bitmaps posted before you can call fpgCreateStandardImages; in fpg_main: {--$IFNDEF wince} fpgCreateStandardImages; (* causes EBusError on Symbol MC1000 WinCE 4.2 see: http://wiki.freepascal.org/Windows_CE_Development_Notes "Using ARM processors, some times you may get a EBusError exception with a message about misaligned data access. The following section explains what this is and how to fix it." - fixed *) {--$ENDIF} cheers Adrian. _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal