我正在显示具有透明度的.png图像,默认情况下效果很好......直到我调整图像大小:
public Image resize(Image image, int width, int height)
{
Image scaled = new Image(Display.getDefault(), width, height);
scaled.getImageData().transparentPixel = image.getImageData().transparentPixel;
GC gc = new GC(scaled);
gc.setAntialias(SWT.ON);
gc.setInterpolation(SWT.HIGH);
gc.drawImage(image, 0, 0,image.getBounds().width, image.getBounds().height, 0, 0, width, height);
gc.dispose();
return scaled;
}
然后透明度消失了,我可以看到"白色"颜色
答案 0 :(得分:2)
24
为您提供图像数据的副本,因此在其上设置透明像素不会更改原始图像。
相反,您需要使用透明像素集从缩放的图像数据创建另一个图像。如下所示:
getImageData()
请注意,这仅在原始图像数据与缩放图像数据(特别是调色板数据)具有相同格式时才有效
如果数据采用不同的格式,请使用:
Image scaled = new Image(Display.getDefault(), width, height);
GC gc = new GC(scaled);
gc.setAntialias(SWT.ON);
gc.setInterpolation(SWT.HIGH);
gc.drawImage(image, 0, 0,image.getBounds().width, image.getBounds().height, 0, 0, width, height);
gc.dispose();
// Image data from scaled image and transparent pixel from original
ImageData imageData = scaled.getImageData();
imageData.transparentPixel = image.getImageData().transparentPixel;
// Final scaled transparent image
Image finalImage = new Image(Display.getDefault(), imageData);
scaled.dispose();