0

JavaDoc でこのコードを見つけましたが、理解できないようです。

output.setRGB(x, y, (image.getRGB(x, y) & 0xff00ff00)
                    | ((image.getRGB(x, y) & 0xff0000) >> 16)
                    | ((image.getRGB(x, y) & 0xff) << 16));

私が知っているのは、このコードが BufferedImage で青色を赤色に変えることです。しかし、青を白または他の色に、またはその逆に置き換えたい場合はどうすればよいでしょうか?

助けていただければ幸いです。

4

2 に答える 2

2

色は次のように 16 進数で保存されます。

RRGGBBAA

赤、緑、青、アルファ。それでは、行の 1 つを見てみましょう。

(image.getRGB(x, y) & 0xff0000) >> 16

image.getRGB(x, y)は値を返しRRGGBBAAますが、この行はそれを でビットマスク0xff0000しています。ここにビジュアルがあります:

RRGGBBAA
&
00FF0000
=
00GG0000

したがって、RRGGBBAA値をに変換しますGG0000

次に、16バイナリビットを右にビットシフトします。Java は 16 進数でビットをシフトすることはできませんが、現在 16 進数で色を視覚化しています。したがって、16 進数は 16 進数であるため、16 バイナリ シフトを 4 16 進シフトに変換する必要があります。2 進数は 2進数で、16 進数の 16 を基数としています。2^4

したがって、右に 4 ビットシフトする必要があります。ビットが右に 4 桁シフトされているため、GG0000これは になります。GG

したがって、色の緑の量の値が得られました。

同様のロジックを他の行に適用して、それらがどのように機能するかを確認できます。

于 2013-04-22T12:16:01.667 に答える
1

色を扱うときは、別のアイデアを使用します。

    BufferedImage image = //create Buffered image
    int rgb = image.getRGB(x,y);   //get Rgb color value
    Color color = new Color(rgb);  // create color with this value
    Color resultColor = new Color(color.getRed(), color.getBlue(), color.getGreen()); //create new color change blue and green colors values
    image.setRGB(x,y,resultColor.getRGB());   //set color

この考え方の方がわかりやすいと思います。

白色にしたい場合は、これを使用してください:

    BufferedImage image = new BufferedImage();
    Color color = new Color(255,255,255);
    image.setRGB(x,y,color.getRGB());
于 2013-04-22T12:28:07.957 に答える