4

我试图使用 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 卡上,但保存的图像也已损坏。

4

0 回答 0