8

RGB カラーを単一の整数値にエンコードしたいと思います。

エンコーディングのアルゴリズムが次のようになっているとしましょう。

int code = (blue * 256 * 256) + (green * 256) + red

ビットシフトおよび/またはビットごとの演算子を使用して、RGBコンポーネントをコードに/からエンコード/デコードするにはどうすればよいですか?

4

4 に答える 4

11
    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));
于 2013-10-09T16:20:26.867 に答える
1
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 が出力されます。これは私が修正した方法ですが、ビットシフトを使用するよりも遅い可能性があるため、プロがこれに同意するかどうかはわかりません

于 2015-03-18T18:55:44.350 に答える
1

あなたが単に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

デコードはコメントのリンクのように行われます。

于 2013-10-09T16:29:50.313 に答える