RÉSOLU! J'ai résolu exactement ce problème - l'affichage des fichiers PNG qui contiennent des zones transparentes. Je ne pouvais pas l'utiliser avec les étiquettes (en fait, le article quoted indique que «l'étiquette ne prend pas en charge la transparence native»), j'ai donc placé l'image directement dans un canevas. L'autre clé du succès consiste à utiliser le constructeur Image qui inclut un troisième paramètre, qui est le masque de transparence. Une étape supplémentaire que j'ai faite consiste à appeler setRegion, ce qui signifie que les événements de la souris (tels que les clics de souris) ne se déclenchent que lorsqu'ils surviennent sur des pixels visibles.
ImageData id = new ImageData("basket.png");
Image image = new Image (display, id, id); //3rd parameter is transparency mask
Canvas c = new Canvas (shell, SWT.TRANSPARENT);
c.addPaintListener(
new PaintListener(){
public void paintControl(PaintEvent e)
{
e.gc.drawImage(image, 0, 0);
}
}
);
//the image has been created, with transparent regions. Now set the active region
//so that mouse click (enter, exit etc) events only fire when they occur over
//visible pixels. If you're not worried about this ignore the code that follows
Region region = new Region();
Rectangle pixel = new Rectangle(0, 0, 1, 1);
for (int y = 0; y < id.height; y++)
{
for (int x = 0; x < id.width; x++)
{
if (id.getAlpha(x,y) > 0)
{
pixel.x = id.x + x;
pixel.y = id.y + y;
region.add(pixel);
}
}
}
c.setRegion(region);
Les PNG semblent fonctionner aussi en utilisant la même technique. –