我试图使用 android onPreviewFrame 方法创建在线扫描仪。我创建了 AsyncTask 来为我处理图像。这是我的转换方法的代码:
public Bitmap renderCroppedGreyscaleBitmap() {
int width = getWidth();
int height = getHeight();
int[] pixels = new int[width * height];
byte[] yuv = yuvData;
int inputOffset = top * dataWidth + left;
for (int y = 0; y < height; y++) {
int outputOffset = y * width;
for (int x = 0; x < width; x++) {
int grey = yuv[inputOffset + x] & 0xff;
pixels[outputOffset + x] = 0xFF000000 | (grey * 0x00010101);
}
inputOffset += dataWidth;
}
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
return bitmap;
}
在某些设备上一切正常,例如 HTC Desire HD、三星 Galaxy S2 或三星 Galaxy GT 或 LG-P500。一些帧以灰度正确发送到服务器并进行处理。
但在 HTC One X 等某些设备上,一切都出错了。而不是真实的图像服务器接收这样的图像:坏图像
我试图更改图像格式 - 没有任何改变(现在我使用的是默认格式 - NV21)。我试图使用 YuvImage 类和方法 compressToJpeg - 没有任何改变。图像仍然解码错误。我试图将图像保存在 SD 卡上,但保存的图像也已损坏。