РЕШИТЬ! Я решил именно эту проблему - отображение файлов PNG, которые содержат прозрачные области. Я не смог заставить его работать с надписями (на самом деле в статье , цитируемой говорится «Label не поддерживает нативную прозрачность»), поэтому вместо этого я поместил изображение прямо в холст. Другим ключом к успеху является использование конструктора Image, который включает 3-й параметр, который является маской прозрачности. Дополнительный шаг, который я сделал, это вызов setRegion, что означает, что события мыши (например, щелчки мыши) запускаются только тогда, когда они происходят над видимыми пикселями.
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);