2012-07-16 100 views
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) 

回答

3

不幸的是,相機的圖像格式不是ARGB_8888。最有可能的是像YUV420p或甚至JPEG壓縮數據。

首先,確定你的情況。

您有兩種選擇:對於YUV(這是一種交錯格式)使用某種轉換格式,對於JPEG,爲您的arg0陣列創建一個內存流並從中讀取位圖。

也有類似的問題在這裏:BitmapFactory null issue in android

而且甚至還有這裏的解決方案:Android byte[] to image in Camera.onPreviewFrame

編輯:你只需要你的裂傷陣列一點點的字節數。

wiki article解釋瞭如何將YUV422/420轉換爲Android API所要求的YUY2。 搜索「Y'UV422也可以用YUY2 FourCC格式代碼」子串表示。

+0

我很欣賞你解釋問題的方式。我試圖使用第二個鏈接,當我按下保存圖片按鈕時,這會導致強制關閉錯誤。檢查我編輯的問題logcat – Numair 2012-07-16 20:36:19

+0

我想出了問題,我工作** onPicturetaken()**(這樣的白癡不提這個),所以它不需要轉換。上面提到的可以在** onPreview()**中工作。感謝@Viktor Latypov爲您提供完美的答案 – Numair 2012-07-31 21:42:17