0

宇宙船が破壊されると、宇宙船の画像のピクセルを含むリストを作成します。ピクセルは、私の Pixel クラスのオブジェクトです。リストを作成した後、さまざまなアクションが実行されるメイン リストに追加されます。これは私のコードがどのように見えるかです:

//Code which creates an array
List<Pixel> pixels = new LinkedList<>();
BufferedImage buff = (BufferedImage)image;
for (int px = 0; px < buff.getWidth(); px++) {
    for (int py = 0; py < buff.getHeight(); py++) {
        int rgb = buff.getRGB(px, py);
        int red = (rgb & 0x00ff0000) >> 16;
        int green = (rgb & 0x0000ff00) >> 8;
        int blue = rgb & 0x000000ff;
        int alpha = (rgb >> 24) & 0xff;
        if (alpha == 255) {
            pixels.add(new Pixel(px, py, red, green, blue));
        }
    }
}
//Pixel class constructor
Pixel(float x, float y, int red, int green, int blue) {
    super(x, y);
    BufferedImage buff = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
    WritableRaster raster = buff.getRaster();
    //LOOKS EVERYTHING IS OKAY SINCE THIS LINE SO THE ERROR MUST BE SOMEWHERE IN THOSE 2 LINES
    raster.setPixel(0, 0, new int[]{red, blue, green, 255});
    image = buff;
}

簡単な説明: image は Image 型のプライベート フィールドです。drawImage() メソッドを使用してピクセルをペイントする repaint() メソッドで使用されます。そして私の問題について:すべてがほとんど問題なく動作します。ピクセルは正しい位置に作成されていますが、すべて紫色です。それらは異なる色調(明るいものと暗いもの)を持っていますが、画像の色と同じ色ではなく、すべて紫です!なぜこうなった?なぜバイオレット?誰かがこの奇妙な振る舞いを理解するのを手伝ってくれませんか?

4

1 に答える 1

1

おそらく、setPixelメソッドで緑と青の値が混同されている可能性があります。色は通常、RGB の順序で指定されます。これは、BufferedImage.

それ以外の

raster.setPixel(0, 0, new int[]{red, blue, green, 255});

試す

raster.setPixel(0, 0, new int[]{red, green, blue, 255});

それがうまくいかない場合は、正しいように見えるまで、配列内のさまざまな変数の順序をいじる必要があるかもしれません。

于 2013-03-14T20:50:06.057 に答える