2016-07-14 27 views
1

而不α工藝RGB值我有,如果我seperately處理每個顏色通道,其性能良好的處理算法中。但是當我試圖處理整個像素值時,就錯過了一些東西。結果不好。現在我要隔離的像素值(排除阿爾法)的3色通道然後在新的值(3個信道)的工作。我怎樣才能在C++中做到這一點?知道我嘗試了RGB_565位圖格式,這不是一個好的解決方案。並知道我想將RGB合併到24位變量中。NDK - 從ARGB_8888位圖

+0

你能後,你已經嘗試了一些代碼? – gregn3

回答

1

可以單獨訪問每個信道。確切的方式取決於實際的像素格式。

ANDROID_BITMAP_FORMAT_RGBA_8888:每個像素爲4個字節長,佈局圖案爲RGBARGBA ...,即第1像素字節爲紅色分量,2-d爲綠色,3-d爲藍色, th是alpha分量。

ANDROID_BITMAP_FORMAT_RGB_565:每個像素是2字節長的,存儲在本地字節序,所以顏色分量可能在明年的方式提取:

red = (u16_pix >> 11) & 0x1f; 
green = (u16_pix >> 5) & 0x3f; 
blue = (u16_pix >> 0) & 0x1f; 

ANDROID_BITMAP_FORMAT_RGBA_4444: 是因爲質量不好過時,你不應該甚至想想這個

ANDROID_BITMAP_FORMAT_A_8: 是1個字節每個像素和設計爲純alpha或灰度圖像。這可能不是你正在尋找的東西。

注意,Android有沒有24 bpp的格式,您必須選擇32bpp的或16bpp的一個。關於你的算法中:有兩種選擇 - 代碼可以訪問各個組件直接在包裝的像素值,或者你可以去交織打包像素分爲幾架飛機,即數組,每個人只能容納一個通道。再經過處理,你可能會再次交錯他們的支持的格式或轉換爲其他格式,你感興趣的內容。