0

bitmapfactory を使用してビットマップ クラスを作成しようとしています。カメラのプレビュー画像を YUV 形式で取得し、手動でグレースケール画像にデコードします。BitmapFactory を介してビットマップ オブジェクトを作成しようとすると、null が返されます。

        try {
            for (int y = 0; y < frameHeight; y++){
                for (int x = 0; x < frameWidth; x++){

                    byte grey = YUVData[y * frameWidth + x];
                    convertedData[y * stride + 3 * x] = grey;
                    convertedData[y * stride + 3 * x + 1] = grey;
                    convertedData[y * stride + 3 * x + 2] = grey;

                }
            }

            Bitmap bitmap =(Bitmap) BitmapFactory.decodeByteArray(convertedData, 0, convertedData.length);
4

1 に答える 1

2

BitmapFactory は、JPEG または PNG を使用してエンコードされた画像ファイルから画像を作成するために使用されます。生データを投げただけでは、関数は使用しているエンコーディングを認識しません。RGB? YUV? 24ビット?32ビット?

私の知る限り、YUV データから画像を作成するネイティブな方法はありません。少なくとも最初に RGB に変換する必要があります。それを示す答えは次のとおりです: Getting frames from Video Image in Android

もちろん、NDK を使用してネイティブ変換関数を作成することもできます。これにより、はるかに高速になります。または、YUV コンバーターのドキュメントをスキャンすることもできますが、クイック スキャンで見つかったのはYuvImageだけで、これはこれを JPEG ストリームに変換することしかできません。

于 2011-12-03T02:31:23.050 に答える