我正在尝试使用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等设备上,一切都出了问题。而不是真实的图像服务器接收这样的图像:bad image
我试图更改图像格式 - 没有任何改变(现在我使用默认格式 - NV21)。我试图使用YuvImage类和方法compressToJpeg - 没有改变。图像仍然是错误的解码。 我试图将图像保存在SD卡上,但保存的图像也已损坏。