このgetRGB()
メソッドは単一のintを返します。赤、緑、青の色をすべて0〜255の値として個別に取得するにはどうすればよいですか?
75472 次
4 に答える
122
ピクセルは、次のように 4 バイト (32 ビット) の整数で表されます。
00000000 00000000 00000000 11111111
^ Alpha ^Red ^Green ^Blue
したがって、個々の色成分を取得するには、バイナリ演算が少し必要です。
int rgb = getRGB(...);
int red = (rgb >> 16) & 0x000000FF;
int green = (rgb >>8 ) & 0x000000FF;
int blue = (rgb) & 0x000000FF;
これは実際にjava.awt.Color
クラスメソッドが行うことです:
553 /**
554 * Returns the red component in the range 0-255 in the default sRGB
555 * space.
556 * @return the red component.
557 * @see #getRGB
558 */
559 public int getRed() {
560 return (getRGB() >> 16) & 0xFF;
561 }
562
563 /**
564 * Returns the green component in the range 0-255 in the default sRGB
565 * space.
566 * @return the green component.
567 * @see #getRGB
568 */
569 public int getGreen() {
570 return (getRGB() >> 8) & 0xFF;
571 }
572
573 /**
574 * Returns the blue component in the range 0-255 in the default sRGB
575 * space.
576 * @return the blue component.
577 * @see #getRGB
578 */
579 public int getBlue() {
580 return (getRGB() >> 0) & 0xFF;
581 }
于 2010-04-11T00:06:53.980 に答える
73
Java のColorクラスは変換を行うことができます。
Color c = new Color(image.getRGB());
int red = c.getRed();
int green = c.getGreen();
int blue = c.getBlue();
于 2010-04-11T00:05:57.050 に答える
8
それを分割するには、いくつかの基本的なバイナリ演算が必要です。
int blue = rgb & 0xFF;
int green = (rgb >> 8) & 0xFF;
int red = (rgb >> 16) & 0xFF;
(または、その逆かもしれませんが、正直なところ思い出せず、ドキュメントからすぐに答えが得られません)
于 2010-04-11T00:06:18.407 に答える
7
単純な色操作には、次を使用できます
bufImg.getRaster().getPixel(x,y,outputChannels)
outputChannels は、フェッチされたピクセルを格納するための配列です。その長さは、画像の実際のチャネル数によって異なります。たとえば、RGB イメージには 3 つのチャネルがあります。RGBA イメージには 4 つのチャネルがあります。
このメソッドには、int、float、および double の 3 つの出力タイプがあります。0 ~ 255 の色の値の範囲を取得するには、実際のパラメーター outputChannels を int[] 配列にする必要があります。
于 2010-04-11T03:25:51.140 に答える