I.背景
あるIRチャート(赤外線放射赤外線)、ページに表示する必要が、IR画像フォーマットがGRAY8である、すなわち、8ビットグレースケール。
Androidで使用されるビットマップ画像フォーマットが、チャンネルあたり8ビットARGB図グレースケールをオンにする必要がある、ARGB_8888あります。
第二に、問題の現象
トランスコードアイデアは、非常に単純である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);
このプレビューは、次のチャートであるときに問題が発生し、明確なスポットが存在していました。
第三に、この問題は解決され
まず、上記の現象は実際には[i]が、確かコード、INTグレー= iru8詳しく見正常でないバイト範囲が127 -128であるため、INTに割り当てられた場合、それは、否定的であれば、このステップは、問題がありますエラーが発生した後、大きな問題は、シフト操作(すべての後に、何のJavaの符号なしはありません)。
次のようにだから我々は変更する必要があります。
int gray = iru8[i] & 0xFF;
そして、通常の画面を実行します。
シフト操作に注意を払うために小さな問題、注意を払うには、余分な注意する必要があります。