[Lazarus] Create transparency

Marc Weustink marc at dommelstein.net
Mon Jul 21 23:02:27 CEST 2008


Valdas Jankūnas wrote:
> Marc Weustink rašė:
> 
>> A faster way, (which might work in most cases) is when you have a 24bit 
>> depth description with a 32bits per pixel image. 
> 
>   How retrieve image description from TBitmap?

IntfImage.DataDescription

> 
>> Then you can simply add 
>> an alpha description (precision=8, shift=24 or 0) to the rawimage.
> 
>   How i can do that?

if Description.BitsPerPixel = 32
then begin
   if  (Description.RedShift <> 0)
   and (Description.BlueShift <> 0)
   and (Description.GreenShift <> 0)
   then begin
     Description.AlphaPrec := 8;
     Description.AlphaShift := 0;
   end
   else
   if  (Description.RedShift <> 24)
   and (Description.BlueShift <> 24)
   and (Description.GreenShift <> 24)
   then begin
     Description.AlphaPrec := 8;
     Description.AlphaShift := 24;
   end;
end;


>> Another thing, I'm not sure if loading form IntfImage/RawImage sets the 
>> right pixelformat (and thus image description).
>> Anyway, maybe the bmp is OK. How do you paint it ?
> 
>   I use Canvas.Draw method.

Bmp.Canvas.Draw(bitmap) draws in the dept of bmp and not the depth of 
bitmap. This means if bmp is only created it has pixelformat=pfDevice. 
Currently that creates a context(and canvas) without alpha channel)

> I found another solution to not use a proxy image, but load resource 
> from stream directly to LazIntfImage (created with 
> Init_BPP32_B8G8R8A8_BIO_TTB description). Now i always got alpha channel 
> and code is flexible to various image types (need just change image 
> reader type). I thing il stay with this solution.

Thats ways faster.

Marc




More information about the Lazarus mailing list