http://bugs.winehq.org/show_bug.cgi?id=24278
Summary: Transparent PNG are shown inverted by applications compiled with Lazarus Product: Wine Version: 1.2-rc4 Platform: x86 OS/Version: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: -unknown AssignedTo: wine-bugs@winehq.org ReportedBy: alejandro.lavarello@gmail.com
Created an attachment (id=30578) --> (http://bugs.winehq.org/attachment.cgi?id=30578) Even at design time, Lazarus shows inverted the PNG in Wine.
Applications that are compiled with Lazarus display transparent PNG images upside down. Tested in Wine 1.2 rc4 in Puppy Linux 5 and in WineXO.
The same executable shows OK in Windows.
A example executable showing the problem can be downloaded from:
http://freakshare.net/files/meqi0gmc/ImageMirroredInWine.rar.html
duplicated in this other link:
http://www.megaupload.com/?d=NVSAW5Y1
According to Marc Weustink, the Lazarus implementer of bitmap handling, this can occur because:
" Through the GetObject() function I get the BITMAP info of a given HBITMAP If the HBITMAP was created as DIBsection, the BITMAP.bmBits will point to the data of the bitmap. On "real" windows you are allowed to manipulate this data.
For these bmBits I want to know if they are bottom-up or top-down.
With the GetDIBits() function I request the first scanline/pixel in bottom-up order (so it is the last line of the bitmap). I cannot compare it to the value I found in bmBits, since top and bottom may have the same pixelvalue.
Now I invert the first pixel of bmBits and I request again the first scanline in bottom-up order.
If the first pixel did change, then the data was bottom-up. It the pixel didn't change, I was manipulating the top of the bitmap
There can be a few issues with wine: 1) bmBits points to a copy of the bitmap data 2) GetDIBits doesn't honor the requested scanline order (== doesn't reorder if bottom-up is requested while the image is top-down) 3) Wine does report a negative height, and I think I request a bottom-up but I get a top-down
"
(see http://www.lazarus.freepascal.org/index.php/topic,10353.0.html )