1

バイト配列イメージをビットマップに変換しようとしていますが、変換後に黒いイメージが表示されます。なぜですか?

// Camera arg conversion to Bitmap
                Bitmap cameraBitmap = BitmapFactory.decodeByteArray(arg0, 0,
                        arg0.length);
                 Bitmap background = Bitmap.createBitmap(cameraBitmap.getWidth(),
                 cameraBitmap.getHeight(), Bitmap.Config.ARGB_8888);

カメラ画像をビットマップに変換したい。なにか提案を。前もって感謝します!!

07-17 02:22:18.149: E/AndroidRuntime(398): FATAL EXCEPTION: main
07-17 02:22:18.149: E/AndroidRuntime(398): java.lang.IllegalArgumentException: only support ImageFormat.NV21 and ImageFormat.YUY2 for now
07-17 02:22:18.149: E/AndroidRuntime(398):  at android.graphics.YuvImage.<init>(YuvImage.java:82)
07-17 02:22:18.149: E/AndroidRuntime(398):  at com.exercise.AndroidCamera.AndroidCamera$4.onPictureTaken(AndroidCamera.java:225)
07-17 02:22:18.149: E/AndroidRuntime(398):  at android.hardware.Camera$EventHandler.handleMessage(Camera.java:320)
07-17 02:22:18.149: E/AndroidRuntime(398):  at android.os.Handler.dispatchMessage(Handler.java:99)
07-17 02:22:18.149: E/AndroidRuntime(398):  at android.os.Looper.loop(Looper.java:123)
07-17 02:22:18.149: E/AndroidRuntime(398):  at android.app.ActivityThread.main(ActivityThread.java:4627)
07-17 02:22:18.149: E/AndroidRuntime(398):  at java.lang.reflect.Method.invokeNative(Native Method)
07-17 02:22:18.149: E/AndroidRuntime(398):  at java.lang.reflect.Method.invoke(Method.java:521)
07-17 02:22:18.149: E/AndroidRuntime(398):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-17 02:22:18.149: E/AndroidRuntime(398):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-17 02:22:18.149: E/AndroidRuntime(398):  at dalvik.system.NativeStart.main(Native Method)
4

1 に答える 1

3

残念ながら、カメラの画像形式は ARGB_8888 ではありません。おそらく、YUV420p や JPEG 圧縮データのようなものです。

まず第一に、あなたのケースが何であるかを判断してください。

2 つのオプションがあります。YUV (インターリーブ形式) の場合は何らかの変換形式を使用し、JPEG の場合は arg0 配列のメモリストリームを作成し、そこからビットマップを読み取ります。

ここにも同様の質問があります: BitmapFactory null issue in android

そして、ここにも解決策があります: Android byte[] to image in Camera.onPreviewFrame

編集:配列内のバイトを少し壊すだけです。

このwiki 記事では、Android API で必要とされる YUV422/420 を YUY2 に変換する方法について説明しています。そこで「Y'UV422 は YUY2 FourCC フォーマット コードでも表現できます」という部分文字列を検索します。

于 2012-07-16T19:56:15.503 に答える