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、Samsung Galaxy S2、Samsung Galaxy GT、LG-P500 などの一部のデバイスでは、すべてがうまく機能します。一部のフレームはグレースケールでサーバーに正しく送信され、処理されます。

しかし、HTC One X などの一部のデバイスでは、すべてがうまくいきません。実際の画像サーバーの代わりに、次のような画像を受信します:悪い画像

私は画像フォーマットを変更しようとしていました - 何も変更されていません(現在、デフォルトのものを使用しています - NV21)。YuvImage クラスとメソッド compressToJpeg を使用しようとしましたが、何も変わりませんでした。画像はまだ正しくデコードされていません。SD カードに画像を保存しようとしましたが、保存された画像も破損していました。

4

0 に答える 0