2017-10-28 12 views
2

私はビット操作を初めてやっていて、次のことをしたいと思っています:
赤のシアンや白が黒になるような私のプログラムには逆の色のargbコードが必要です。 Photoshopを試してみたら、255 - 赤、255 - 緑、255 - 青を計算する必要があることが分かりました。だから、これは次のようになります。ビット操作:アルファを無視した逆argb

int getInversed(int argb) { 
    Color old = new Color(argb); 
    Color negative = new Color(255 - old.getRed(), 255 - old.getGreen(), 255 - old.getBlue(), old.getAlpha()); 
    return negative.getRGB(); 
} 

は今、私はあなたが8ビットbytesとして赤、緑、青の値を取る場合、あなたは、単に同じを得るために~オペレータとそれらを逆できることを推測しました結果。
しかし、私はそれだろうまた、逆アルファいるので、全体のARGBコードを反転することができないと私はアルファが手つかずたい:

public int getInversed(int argb) { 
    return ~argb; //inverses alpha as well 
} 

は、どのように私は、アルファ部分を無視して、ビット演算とARGBのコードを逆できますか?

+0

最も簡単な方法は、ちょうどあなたが反転するために必要な部品をマスキングさ: 'マスク= 0xFFFFFFの。 argb =(〜argb&mask)| (argb&〜mask); ' –

答えて

5

あなたはxor maskでそれを行うことができます。

したがってビットの値の反転は、それが影響しないことを意味し、XORマスキングがビット安全であることに注意してください。また1
でそれらを排他的論理和演算することによって行われますマスクされていないビット

return argb^0x00FFFFFF;