Java,SWT,调整大小时图像透明度会丢失

时间:2016-09-20 08:59:57

标签: java swt

我正在显示具有透明度的.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;
}
然后透明度消失了,我可以看到"白色"颜色

1 个答案:

答案 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();