これは、ピクセル値から RGB を抽出することです。コード スニペットは次のとおりです。
Byte a = (Byte)(myColor >> 24);
// Prevent division by zero
UInt32 ai = a;
if (ai == 0)
{
ai = 1;
}
ai = ((255 << 8) / ai);
Byte bA = a;
Byte bR = (Byte)((((myColor >> 16) & 0xFF) * ai) >> 8);
Byte bG = (Byte)((((myColor >> 8) & 0xFF) * ai) >> 8);
Byte bB = (Byte)((((myColor & 0xFF) * ai) >> 8));
私は技術的に、つまりビットとバイナリのレベルで何が起こっているかを理解しています。特に、「Byte b# = (Byte)((((myColor >> n) & 0xFF)」の部分を理解しています。理解していないのは前乗算です (理論ではなく、ここでの実装を意味します)。特に私は理解したい - そして私の質問に:
- 255 が 8 ビット右にシフトされ、アルファで除算されるのはなぜですか?
- 各値にこの結果が乗算され、次に 8 ビット左にシフトされるのはなぜですか?