http://bugs.winehq.org/show_bug.cgi?id=9030
--- Comment #25 from Boran Car boran.car@gmail.com 2010-05-25 15:13:44 --- Just to report my investigation results here. I have debugged the application using GDB. I have also added my custom palette in X11DRV_DIB_CopyDIBSection by taking the square root of the index of the entry module 256. Without this hack, I was not able to obtain the picture.
I have noticed while debugging that no data gets written to the surface address between Lock and Unlock which is confusing. Second, there was no indication of using memcpy or memmove in between (a by hand method is needed, I have implemented a custom method in surface.c to call from GDB, since memcpy also didn't work when called from GDB).
As you can see, the bitmap is written bottom-up. Any clues? Is there a method that copies data inverted?