4

8ビット形式で色を表す2バイトがあります

MSB  LSB
01234567
  RRGGBB

ビット 0 と 1 はトラッシュです。

2 つの色をブレンドするには、色ごとのビット数を平均化する必要がありますか?

R1 = ( C1 ^ 00110000B ) >> 4;
G1 = ( C1 ^ 00001100B ) >> 2;
B1 = ( C1 ^ 00000011B );

R2 = ( C2 ^ 00110000B ) >> 4;
G2 = ( C2 ^ 00001100B ) >> 2;
B2 = ( C2 ^ 00000011B );

R3 = avg( R1 , R2 ) << 4;
G3 = avg( G1 , G2 ) << 2;
B3 = avg( B1 , B2 );

C3 = R3 + G3 + B3

C1は最初の色、は 2番目C2C3は混合色、^はビット単位の AND、>>はビット単位の右シフト、<<はビット単位の左シフト、xxxxxxxxBは 2 進数、avg( a , b )は算術平均です。

4

1 に答える 1

2

色は 3D 空間の点と考えることができます。「平均」の定義は、使用するスペースによって異なります。RGB、HSL、またはより「エキゾチック」なものを平均すると、異なる結果が得られます。

しかし、色ごとに2ビットに制限されている場合、それは実際にはそれほど重要ではなく、あなたが提案するものは問題ありません(ただし、コメントに記載されているように、マスクには が必要&であり、 は必要ありません)。^

(「平均」とは、(色ごとに)ビットを追加し、2で割る(右シフト)ことを意味すると仮定します。これを繰り返し行う場合は注意してください(たとえば、2つの画像を平均し、結果を3番目で平均し、結果を平均しますの 4 番目の場合) 右シフトが切り捨てられるため、最終的には何か黒いものになります。そのため、値が少し低くなる傾向があります)。

于 2012-07-12T00:21:35.123 に答える