xlibでプロジェクトを書いていますが、色に関して問題があります。色の値を格納するために符号なしの長い型変数を使用しています。各色の赤、緑、青の値を取得する方法を知っている人はいますか?
1118 次
2 に答える
2
byte a = (byte)(value >> 24);
byte r = (byte)(value >> 16);
byte g = (byte)(value >> 8);
byte b = (byte)value;
于 2012-08-30T07:43:05.997 に答える
2
24ビットの色(各色成分に8つ)が1つの32ビット整数に一緒に格納されていると言っていますか?その場合は、論理積演算を使用して値を取得し、他のビットをゼロにすることができます。
あなたがで始めたとしましょう
/*
alpha? r g b
00000000 10101010 10101010 10101010 your 32 bit integer might look like this
& logical AND operator
00000000 00000000 00000000 11111111 a bit mask
=
00000000 00000000 00000000 10101010 the result
so now your 32 bit integer only has the blue values.
To do this in code...
*/
unsigned char B = (unsigned char) (your_integer & 0x000000ff) //000000ff is hex version of the bit mask
//but now what about the other two colors? you can't just apply a bit mask like 0000ff00 because 00000000000000001010101000000000 is much larger than 255.
//So you have to either divide the result by 256 to shift the bits right, or use >>8 to shift them to the right.
unsigned char G = (unsigned char) ((your_integer & 0x0000ff00) / 256)
unsigned char R = (unsigned char) ((your_integer & 0x00ff0000) / 256^2)
//or using the way I've used in the past... shifting before the mask.
unsigned char G = (unsigned char) ((your_integer >> 8) & 0x000000ff)
unsigned char R = (unsigned char) ((your_integer >> 16) & 0x000000ff)
于 2012-08-30T07:45:45.333 に答える