BufferedImagesを描画する際に問題があります。私は2Dタイルベースのマップエディタで作業しています。タイルを描画するときは、最初に下位レイヤーの後に最上位レイヤーを描画します。この方法はJLabelのを拡張するクラスであること透明でないBufferedImage上に透明なBufferedImageを描画する
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(tileLayer, 0, 0, null);
g.drawImage(objectLayer, 0, 0, null);
}
注:これ等 。それは実際に設定されたImageIconを再描画しています。ここで問題を理解するには、objectLayerのBufferedImageを作成する前に、各ピクセルの色を確認する必要があります。ピクセルがその色である場合、そのピクセルはアルファ値が0のすべての白に設定されます(透明になるように)。例:
int transparentRed = transparentColor.getRed();
int transparentGreen = transparentColor.getGreen();
int transparentBlue = transparentColor.getBlue();
for (int x = 0; x < image.getWidth(); x++)
{
for (int y = 0; y < image.getHeight(); y++)
{
int color = i.getRGB(x, y);
int red = (color & 0x00FF0000) >> 16;
int green = (color & 0x0000FF00) >> 8;
int blue = color & 0x000000FF;
// If the pixel matches the specified transparent color
// Then set it to an absolute white with alpha at 0
if (red == transparentRed && green == transparentGreen && blue == transparentBlue)
i.setRGB(x, y, 0x00FFFFFF);
}
}
return i;
重要な点は、以前に配置された下位レイヤーのピクセルに影響を与えずに下位レイヤーに上レイヤーを描画することです。最上階層の白いピクセルは表示されません。
問題は、これは一部の画像や他の画像では機能しないということです。特定の画像では、最上のレイヤーを描画するときに、とにかく(アルファ値が0に設定されていないかのように)白を描画し、他の画像では魅力的に機能し、白いピクセルは描画されませんin。
.pngイメージのみを使用していますので、フォーマットする必要はありません。私は非常にいくつかのことを試みました。誰かが手伝ってもらえれば、私は立ち往生しています。
すぐに役立つように、[SSCCE](http://sscce.org/)を投稿してください。私たちはまた、1.小さな(バイト)イメージへのリンクが必要です。 2.失敗した小さな画像。 –
'g.drawImage(tileLayer、0、0、null);'(両方ともに) 'this'のために' null'をスワップします。 –
それを試しましたが、それは助けに見えませんでした。 – Kyle