1. 程式人生 > >灰度圖(IR 圖)轉成 RGB 圖預覽,畫面出現光斑/黃斑問題解決

灰度圖(IR 圖)轉成 RGB 圖預覽,畫面出現光斑/黃斑問題解決

一、背景

存在一個 IR 圖(紅外線 Infrared Radiation),需要在頁面上顯示出來,IR 圖片格式是 gray8,即 8 位的灰度圖。

Android 上的 Bitmap 圖片格式使用的是 ARGB_8888,所以需要把灰度圖轉 ARGB 圖,每個通道都為 8 位。

二、問題現象

轉碼思路很簡單,就是一個 int 表示一個畫素點,剛好是 4 * 8 = 32 位。
那麼每一位的值都是等於灰度值,透明度為 0xFF 即可。

    Canvas canvas = mCameraView.getHolder().lockCanvas();
    // draw ir
int[] pixels = new int[mImageWidth * mImageHeight]; for (int i = 0; i < pixels.length; i++) { int gray = iru8[i]; pixels[i] = (0XFF000000) | (gray << 16) | (gray << 8) | gray; } Bitmap bitmap = Bitmap.createBitmap(pixels, mImageWidth, mImageHeight, Bitmap.Config.
ARGB_8888); canvas.drawBitmap(bitmap, mIRMatrix, null);

然後預覽時出現的問題就是下圖這樣,有很明顯的光斑存在:
在這裡插入圖片描述

三、問題解決

首先,上面的現象肯定不是正常的,仔細看看程式碼,int gray = iru8[i] 這個步驟其實是有問題的,因為 byte 的範圍是 -128 ~ 127 的,如果是負數,賦值為 int 的時候問題就大了(畢竟 java 裡面也沒有無符號數),之後的移位操作就會出錯。

所以我們需要如下改動即可:

    int gray = iru8[i] & 0xFF;

再執行一下,畫面就正常了:
在這裡插入圖片描述

一個小問題,注意注意移位操作中應該多加小心。