我使用IntBuffer
來操作位圖的像素,但緩衝區中的值應爲AABBGGRR,而顏色常量爲AARRGGBB。我知道我可以使用Color.argb
,Color.a
......來倒置,但我認爲它並不完美。將ARGB顏色值反轉爲ABGR的快速算法?
我需要操縱大量的像素,所以我需要一個能夠在短時間內執行此操作的算法。我覺得這個比特表示的,但它是不正確:
0xFFFFFFFF^pSourceColor
如果沒有更好的,也許我會用位移位運算符(執行Color.a
,...),而不是調用功能以減少時間。
編輯:
這是我目前的功能轉換,但我認爲有建議立即進行刪除是一個更好的算法(少商)來執行它:
private int getBufferedColor(final int pSourceColor) {
return
((pSourceColor >> 24) << 24) | // Alpha
((pSourceColor >> 16) & 0xFF) | // Red -> Blue
((pSourceColor >> 8) & 0xFF) << 8 | // Green
((pSourceColor) & 0xFF) << 16; // Blue -> Red
}
可能重複[如何將RGB轉換爲BGR?](http://stackoverflow.com/questions/3041499/how-to-convert-rgb-to-bgr) –
沒有,只有該主題討論RGB。好的答案實際上是使用位移來獲得紅色,綠色和藍色。我的問題更加先進,因爲Alpha不會改變立場。 –
1)沒有辦法解決這個問題(以高性能的方式)而不使用位移,2)最好的方法就是在這個答案中。在你的情況下,只需保存阿爾法,將其移出,然後在最後添加它。 –