2017-10-28 284 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代码,忽略Alpha一部分?

+0

简单的方法是屏蔽掉你需要反转的部分:'面膜= 0XFFFFFF; argb =(〜argb&mask)| (argb&〜mask);' –

回答

5

你可以用xor mask做到这一点:

因此比特值的反转是通过用1
同样异或他们所做的注意,异或掩蔽位安全的,这意味着它不会影响未屏蔽位

return argb^0x00FFFFFF;