2016-09-20 54 views
1

林显示png格式与transparencity在默认情况下行之有效的图像时,图像transparencity迷路......直到我调整图像大小:的Java,SWT,调整

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; 
} 

则透明度走了,我可以看到“白色”

回答

2

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

注意,当原始图像数据具有相同的格式,缩放后的图像数据(特别是调色板数据)

如果数据是在不同的格式使用这个唯一的作品:

ImageData origData = image.getImageData(); 

imageData.transparentPixel = imageData.palette.getPixel(origData.palette.getRGB(origData.transparentPixel)); 
+0

对不起它不工作,透明度还在不在了(和gc.dispose()应到最后一行,因为GS仍使用) –

+1

可能的图像数据格式不同,在这种情况下工作了透明像素的值更难。尝试像'imageData.transparentPixel = imageData.getPixel(0,0);'这使用左上角的像素作为透明颜色。 –

+0

它确实有效,但它并不总是这样):)) –