I. Antecedentes
Hay un diagrama de IR ( radiación infrarroja del infrarrojo ), necesidad que se mostrará en la página, formato de imagen IR es GRAY8 , es decir, en escala de grises de 8 bits .
formatos de imagen de mapa de bits utilizados en Android es ARGB_8888, es necesario girar ARGB figura escala de grises, 8 bits por canal.
, El fenómeno segundo problema
Transcodificación idea es muy simple, es un int indica un píxel, es exactamente 4 * 8 = 32 bits.
A continuación, el valor de cada bit de valores de gris son iguales, la transparencia puede ser 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);
A continuación, los problemas surgen cuando esta vista previa es la siguiente tabla, hubo existe un punto claro:
En tercer lugar, el problema se resuelve
En primer lugar, el fenómeno anterior es, sin duda no es normal, un vistazo más de cerca el código, int gris = iru8 [i] De hecho, este paso es problemática debido a que el rango de bytes entre -128 a 127, si es negativo, cuando se asigna a un int gran problema (después de todo, no hay java sin firmar) después de la operación de cambio se produce un error.
Así tenemos que el cambio de la siguiente manera:
int gray = iru8[i] & 0xFF;
Y a continuación, ejecutar la pantalla a la normalidad:
Un pequeño problema, prestar atención a prestar atención a la operación de cambio debe ser muy cuidadoso.