2012-07-16 103 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