0

値を挿入するには、まずマスクを使用して、特定のカラー チャネルに対応するピクセルの 8 ビットをクリアします。たとえば、赤の場合、1 の 8 ビット マスクを 16 ビット左にシフトし、(~ 演算子を使用して) 反転し、このマスクを RGB 値で「AND」(&) して、8 ビットをクリアします。残りのビットは変更しません。次に、パラメータ値 (この場合は赤) を同じビット数 (赤の場合は 16) だけ左にシフトし、シフトされた値をピクセル値に "or" (|) します。

int getRed(){
    red = (Pixel>>16);
    red = ~Pixel;
    red = Pixel<<16 | Pixel;
    return red;
}

指示に従って何が間違っていますか?

4

2 に答える 2

2

ここでの問題は、割り当てがどのように機能するかを理解する上での基本的な問題のようです (Java で...そしてほぼすべての命令型プログラミング言語で!)。例えば:

red = (Pixel>>16);
red = ~Pixel;

それは言います:

  1. 16ビットシフトしredた値に代入Pixel

  2. 否定されたビット単位redの値に代入します。Pixelこれにより、前の手順で計算した値が上書きされます。red

手順 1 で計算した値を否定する場合は、次のようにする必要があります。

red = ~red;
于 2013-10-07T02:10:09.543 に答える