1

BufferedImages の描画に関して問題が発生しています。私は 2D タイル ベースのマップ エディターで作業しています。タイルを描画すると、最初に下のレイヤーが描画され、次に上のレイヤーが描画されます。そのようです:

public void paintComponent(Graphics g)
{
    super.paintComponent(g);
    g.drawImage(tileLayer, 0, 0, null);
    g.drawImage(objectLayer, 0, 0, null);
}

このメソッドは、JLabel を拡張するクラスにあることに注意してください。実際に設定された 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に設定されていないかのように)、他の画像では魅力のように機能し、白いピクセルは描画されませんの。

私は .png 画像のみを使用しているので、書式設定とは関係ないことがわかっています。私はかなりの数の異なることを試しましたが、誰かが助けてくれるなら行き詰まっています。

4

1 に答える 1

1

デフォルトでは、BufferedImage はアルファ チャネルをサポートしていないと思います。BufferedImage を作成するときに、BufferedImage.TYPE_INT_ARGB を渡すと問題が解決しました。

于 2012-04-14T00:26:31.480 に答える