[lazarus] Bitmap transparency?

Marc Weustink marc at dommelstein.net
Sat Nov 8 12:57:15 EST 2003


At 17:59 8-11-2003, Micha Nelissen wrote:
>Andrew Johnson wrote:
>
>>On Sat, 2003-11-08 at 10:56, Micha Nelissen wrote:
>>
>>>Big *sigh*. Turns out that StretchBlt is implemented with transparency 
>>>support in gtk. Really, these extensions need to be documented in 
>>>TInterfaceObject. How else can we EVER expect to get other (like qt) 
>>>interfaces working? The win32 api is at least documented in msdn.
>>
>>oh. hum. this is not an extension to the routine.
>>that is because of pixmaps. pixmaps natively have a mask, bi-level
>>bitmask. Win32 on the other hand uses bitmap which has no such thing.
>>Thus native format on windows has no need for transparency in the
>>stretch routine, which is why in Delphi they have to have special
>>functions etc to handle it.
>>AKA this is because in gtk+ the alpha support is in the backend level,
>>in win32 it must be on the LCL/App level, or with a special function in
>>the backend.
>>This isn't a matter of what the function does so much as what the format
>>is. If pixmap didn't natively support alpha via a bitmask, then the
>>routine wouldn't handle it. :)
>
>Yes, but the LCL depends on this 'native' pixmap support for transparency.

I wonder if this is the case.
What might be the case is that it erroneously uses StretchBlt where it 
should have been using TransparentStretchBlt

>If one takes the win32api as api (StretchBlt), then from a win32 POV it 
>seems an extension on which there is a dependency.

As Andrew said, it is *not* an extention. It is native behaviour of the 
image.  Pixmaps have a transparency. So drawing an image with transparency 
(Pixmap) will result in an image with transparency.
Drawing an image without transparency (win32 Bitmap) will result in an 
image without transparency

>Said another way, if StretchBlt does not support transparency, which it 
>does not for win32, the LCL does not work correctly. Which is what I am 
>experiencing.

ATM I don't know where,what and how, but I assume that 
TransparentStretchBlt should have been used.

>Do you have any tips how to make a transparency mask so I can implement 
>the necessary behaviour?

Look at the implementation of TransparentStretchBlt

But, don't modify the interface StretchBlt function to draw transparent. It 
should *not* modify the image.

Marc







More information about the Lazarus mailing list