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). > >
My solution for the moment is: {$IFDEF wince} procedure WinCESetInitBMP(BMP: HBITMAP; awidth, aheight, depth: Integer; aimgdata: Pointer); var hdcSrc, hdcDest: HDC; hbmSrc: HBITMAP; bm: BITMAP; data, p, pend: pByte; begin hdcSrc:= CreateCompatibleDC(0); hdcDest:= CreateCompatibleDC(0); hbmSrc:= CreateBitmap(awidth, aheight, 1, depth, nil); if depth = 32 then SetBitmapBits(hbmSrc, (awidth * aheight) *4, aimgdata) else SetBitmapBits(hbmSrc, (awidth * aheight) div 8, aimgdata); SelectObject(hdcSrc, hbmSrc); SelectObject(hdcDest, BMP); BitBlt(hdcDest, 0, 0, awidth, aheight, hdcSrc, 0, 0, SRCCOPY); DeleteDC(hdcSrc); DeleteDC(hdcDest); DeleteObject(hbmSrc); end; {$ENDIF} and change the code in TfpgGDIImage.DoInitImage to {$IFNDEF wince} SetDIBits(wapplication.display, FBMPHandle, 0, aheight, aimgdata, bi, DIB_RGB_COLORS); {$else} WinCESetInitBMP(FBMPHandle, awidth, aheight, bi.bmiHeader.biBitCount, aimgdata); {$ENDIF} and in TfpgGDIImage.DoInitImageMask to: {$IFNDEF wince} SetDIBits(wapplication.display, FMaskHandle, 0, aheight, aimgdata, pbi^, DIB_RGB_COLORS); {$ELSE} WinCESetInitBMP(FMaskHandle, awidth, aheight, bi.bmiHeader.biBitCount, aimgdata); {$ENDIF} now bitmaps are loaded an painted correctly, but still the stdimg.xxx (e.g. stdimg.close) are not painted correctly - I guess there is a problem with the masking. Adrian. _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal