2011-12-03 4 views
0

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

 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); 
+0

同様の質問と回答: [画像へのバイトデータ] [1] [1]:http://stackoverflow.com/questions/5212531/android-byte-to-image -in-camera-onpreviewframe – Kaediil

答えて

2

BitmapFactoryは、JPEGまたはPNGを使用してエンコードされたイメージファイルからイメージを作成するために使用されます。生のデータを投げ込むだけでは、どのエンコーディングを使用しているのか分かりません。 RGB? YUV? 24ビット? 32ビット?

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

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

+0

ありがとう、それは私がそうすることができないことを理解するのに役立ちます – cagryInside