[Gambas-user] Pb with transparency?

Benoît Minisini gambas at ...1...
Mon Apr 27 11:38:33 CEST 2009


> Hi,
>
> Gambas 2.12 with QT
>
> I had a prog that worked well in Gambas 2.11 but now it
> doesn't work correctly for all the images with transparent
> areas.
> Here is a very short illustration of the problem
>
> DIM PicSac AS Picture
> DIM PicCase AS Object[]
> Dim i AS Integer
>
> PicCase.Resize(2)
> FOR i = 0 TO 1
>     PicCase[i] = NEW Picture(14, 14, TRUE)
> NEXT
> PicCase[0] = Picture.Load(image with some transparent part)
> PicCase[1] = Picture.Load(image without transparent area)
>
> PicSac = NEW Picture(14, 14, TRUE)
> i = 0
> Draw.Begin(PicSac)
> Draw.Picture(PicCase[i], 0, 0, 14, 14, 0, 0, 14, 14)
> Draw.End
>
> PictureBox1.Picture = PicSac
>
> i = 0 => nothing displayed
> i = 1 => correct display
> (I know that Gambas 2.12 changed the Draw routine)
> Is it a bug?
>
> regards,
> Dominique Simonart
>

I will look at that.

Beware that the Picture class is not really transparent. It has no alpha 
channel but a bitmap mask.

Creating a "transparent" Picture internally creates an X11 pixmap and a X11 
bitmap mask. Drawing on it the must update both the pixmap and the mask. I 
think that the mask update is buggy for the Draw.Picture() method.

Anyway, you should use the Image class and its Draw method to draw an image on 
top another one with real alpha transparency.

To add to the complexity, converting an Image to a Picture keeps the alpha 
information with gb.qt, but not with gb.gtk. This is a Qt feature, that uses 
the XRender extension for that. But GTK+ don't, and just removes all pixels 
whose alpha component is lower than 128. But you should not take that into 
account as it is really toolkit specific.

Regards,

-- 
Benoît




More information about the User mailing list