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 如何調整字型大小

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

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