ImageList - my findings

Mike Hearn m.hearn at signal.qinetiq.com
Mon Mar 24 03:50:19 CST 2003


I found the error seemed to surface with 1 bit bitmaps - I didn't know
the encoding used though and got stuck. I think it's copying bytes not
bits, which leads to corruption.

On Mon, 2003-03-24 at 02:57, Vitaliy Margolen wrote:
> Well, it's the problem dealing with multi-row bitmaps for Image list. Here is
> what happens:
> - When image list has single row bitmaps (image + mask) everything fine.
> - When image list has multi row bitmaps, wine's ImageLitst tries to rearrange them
>   into single row. And this is where it fails.
> It's not as easy as it seems. Right now I'm messing with one simple case:
>   Image list has 6 images 21x21 4 bit color in 84x63 bitmap. Plus masks (1 bit B&W).
>   You can't just copy this byte by byte. Somewhere you have to copy bit by bit. Or
>   combine bits from previous image with bits from current image.
> 
> Sunday, March 23, 2003, 6:24:04 PM, you wrote:
> 
> 
> > Hi Vitaliy,
> 
> > I'm also working on a corruption problem that occurs in Visio's 
> > toolbars. It seems that we don't draw transparent images properly 
> > sometimes. The case that appears to be screwing up is when the 
> > imagelist's default background colour is CLR_NONE, and an image is drawn 
> > with CLR_DEFAULT as the background.  The image gets random junk drawn 
> > where hbmMask is nonzero.
> 
> > I think you're right about DIBSections... we should create and use them. 
> >   The programmer who originally implemented Imagelist probably didn't 
> > know about it...
> 
> > Mike
> 
> > Vitaliy Margolen wrote:
> >> For past few days I was trying to figure out what is the problem with corrupt
> >> bitmaps. Here is my findings:
> >> 1. _read_bitmap does is not work right. The for() loop where it's restructuring
> >>    original bitmap from multi-row into single-row.
> >> 2. Windows creates DIBSection to keep original bitmap so it could be saved as is.
> >>    This is not used that often. However development tools do use it. For example:
> >>    Delphi.
> >> 
> >> I have few questions before making any hacking:
> >> - Why do we use single row bitpams versus multi-row like native?
> >> - Why we not creating DIBSection?
> >> 
> 
-- 
Mike Hearn <m.hearn at signal.qinetiq.com>
QinetiQ - Malvern Technology Center




More information about the wine-devel mailing list