2016-09-20 55 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

它確實有效,但它並不總是這樣):)) –