2017-10-28 287 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;