在一些Android设备上解码YUV图像时出现问题

在一些Android设备上解码YUV图像时出现问题,android,image-processing,yuv,Android,Image Processing,Yuv,我尝试使用android onPreviewFrame方法创建在线扫描仪。我已经创建了AsyncTask来为我处理映像。这是我转换方法的代码: public Bitmap renderCroppedGreyscaleBitmap() { int width = getWidth(); int height = getHeight(); int[] pixels = new int[width * height]; byte[] yuv = yuvData;

我尝试使用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;
}
public位图renderCroppedGreyscaleBitmap(){
int width=getWidth();
int height=getHeight();
int[]像素=新int[宽度*高度];
字节[]yuv=yuvData;
int inputOffset=top*dataWidth+left;
对于(int y=0;y
在某些设备上,一切都很好,比如HTC Desire HD、三星galaxy S2或三星galaxy GT或LG-P500。某些帧以灰度正确发送到服务器并进行处理

但在一些设备上,比如HTC One X,一切都出了问题。服务器接收的图像不是真实图像,而是如下所示:

我试图更改图像格式-没有任何更改(现在我使用默认格式-NV21)。我尝试使用YuvImage类和方法compressToJpeg-没有任何更改。图像仍被错误解码。
我试图在SD卡上保存图像,但保存的图像也已损坏。

也有类似问题。在我的例子中,不是预览帧,而是真实的照片。我通过设置不同的图片分辨率来解决这个问题。检查更改预览分辨率是否会改变任何内容。我还要确保你的预览纵横比与图片纵横比匹配,因为我在这方面也遇到了一些问题。android.hardware.camera.任何硬件功能也会导致问题。