RGB カラーを単一の整数値にエンコードしたいと思います。
エンコーディングのアルゴリズムが次のようになっているとしましょう。
int code = (blue * 256 * 256) + (green * 256) + red
ビットシフトおよび/またはビットごとの演算子を使用して、RGBコンポーネントをコードに/からエンコード/デコードするにはどうすればよいですか?
RGB カラーを単一の整数値にエンコードしたいと思います。
エンコーディングのアルゴリズムが次のようになっているとしましょう。
int code = (blue * 256 * 256) + (green * 256) + red
ビットシフトおよび/またはビットごとの演算子を使用して、RGBコンポーネントをコードに/からエンコード/デコードするにはどうすればよいですか?
int blueMask = 0xFF0000, greenMask = 0xFF00, redMask = 0xFF;
int r = 12, g = 13, b = 14;
int bgrValue = (b << 16) + (g << 8) + r;
System.out.println("blue:" + ((bgrValue & blueMask) >> 16));
System.out.println("red:" + ((bgrValue & redMask)));
System.out.println("green:" + ((bgrValue & greenMask) >> 8));
public static void main(String[] args){
int red = 111;
int green = 222;
int blue = 121;
int code = red*256*256 + green*256 + blue;
blue = code%256;
green = (code%(256*256) - blue)/256;
red = (code - blue - green*256)/(256*256);
System.out.println("" + red + green + blue);
}
これにより、意図したとおりに 111222121 が出力されます。これは私が修正した方法ですが、ビットシフトを使用するよりも遅い可能性があるため、プロがこれに同意するかどうかはわかりません
あなたが単にRGB変換をしたいだけで、私がどのように使用することをお勧めするか気にしない場合java.awt.Color
int r = 255; //red
int g = 255; //green
int b = 255; //blue
int a = 255; //alpha
Color c = new Color(r,g,b,a);
getRGBメソッドと getRed、getBlue、getGreen メソッドの使用
int RGB = c.getRGB();
int red = c.getRed();
int blue = c.getBlue();
int green = c.getGreen();
別の方法として、コンストラクターを使用してカラー オブジェクトを構築することもできColor(r,g,b)
ます。デフォルトのアルファは 255 です。
ビット操作あり (ARGB、32 ビット色空間)。RGB カラーの作成:
int alpha = 255;
int red = 128;
int green = 128;
int blue = 128;
int RGB = (alpha << 24);
RGB = RGB | (red << 16);
RGB = RGB | (green << 8);
RGB = RGB | (blue);
System.out.println(Integer.toBinaryString(RGB));
外11111111100000001000000010000000
デコードはコメントのリンクのように行われます。