BitmapFactory.decodeByteArray() が NULL を返す 質問する

BitmapFactory.decodeByteArray() が NULL を返す 質問する

私はカメラのpreviewCallbackを使って画像を取得しようとしています。私が使用しているコードは次のとおりです。

private Camera.PreviewCallback mPrevCallback = new Camera.PreviewCallback() 
{
        public void onPreviewFrame( byte[] data, Camera Cam ) {
                Log.d("CombineTestActivity", "Preview started");
                Log.d("CombineTestActivity", "Data length = " 
                        + data.length );
                currentprev = BitmapFactory.decodeByteArray( data, 0, 
                        data.length );

               if( currentprev == null )
                   Log.d("CombineTestActivity", "currentprev is null" );

                Log.d("CombineTestActivity", "Preview Finished" );

        }
};

データの長さは常に 576​​000 と同じになります。

また、カメラのパラメータを変更して、画像が異なる形式で返されるようにしてみました。その場合、次のようになります。

mCamera = Camera.open();
camParam = mCamera.getParameters();
camParam.setPreviewFormat( ImageFormat.RGB_565 );
mCamera.setParameters( camParam );
    mCamera.setPreviewCallback( mPrevCallback );

しかし、プレビュー形式を変更した場合も、デフォルトのNV21のままにした場合も、BitmapFactory.decodeByteArrayはnullとして返されます。プレビュー形式をJPEGタイプに変更することも試しました。ddmsにデバッグステートメントも表示されます。

「D/skia (14391): --- SkImageDecoder::Factory が null を返しました」

ベストアンサー1

わかりました。これが役に立つといいのですが。

迅速な解決策を探してインターネットをくまなく調べ、完璧なものを見つけました。

これはAndroid 2.1以降で動作します

off3nsiv3さんに感謝しますこのページ

// Convert to JPG
Size previewSize = camera.getParameters().getPreviewSize(); 
YuvImage yuvimage=new YuvImage(data, ImageFormat.NV21, previewSize.width, previewSize.height, null);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
yuvimage.compressToJpeg(new Rect(0, 0, previewSize.width, previewSize.height), 80, baos);
byte[] jdata = baos.toByteArray();

// Convert to Bitmap
Bitmap bmp = BitmapFactory.decodeByteArray(jdata, 0, jdata.length);

off3nsiv3 のコードを少し変更するだけで準備完了です。手動デコードと比較すると、FPS は依然として非常に高いです。

上記のコードでは、80 は jpeg 品質です (0 から 100、100 が最高)。

おすすめ記事