Bitmap copyPixelsFromBuffer 顏色不正確?

最近在做圖像處理的功能時發現一個奇怪的現象,當使用copyPixelsFromBuffer直接將ARGB_8888順序的Buffer丟回給Bitmap時,顏色會偏藍。
後來查了一下才發現用copyPixelsFromBuffer丟ARGB_8888資料時,必須將R跟B交換,也就是用ABGR的順序,顏色才會正確。


將ARGB轉ABGR的方法:
pixel = (R << 0) | (G << 8) | (B << 16) | (A << 24);

pixel = (pixel & 0xff00ff00) |
 ((pixel & 0x00ff0000) >> 16) |
 ((pixel & 0x000000ff) << 16);

註:若使用setPixel或setPixels來設定Bitmap的話,則不需調換。


參考資料:
http://developer.android.com/reference/android/graphics/Bitmap.html#copyPixelsFromBuffer(java.nio.Buffer)
http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/BitmapPixels.html

這個網誌中的熱門文章

Android Studio 如何調整字型大小

Android Studio 無法在實機上 Run/Debug 程式?

App在Google Play被停權與恢復的經驗分享