2016-09-20 5 views
1

イムのサイズを変更する際SWT、画像transparencityが失われる...私は画像のサイズを変更するまで:ジャワ、デフォルトではうまく機能しtransparencityとの.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; 
} 

その後、透明性がなくなって、私ができます「白」の色を参照してください

答えて

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

それは動作しますが、それは必ずしもそうではありません:)) –

関連する問題