【问题标题】:Byte array image to bitmap字节数组图像到位图
【发布时间】:2012-07-16 19:49:46
【问题描述】:

我正在尝试将字节数组图像转换为位图,但转换后它给了我黑色图像,为什么?

// 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)

【问题讨论】:

    标签: android bitmap bytearray


    【解决方案1】:

    很遗憾,相机的图像格式不是 ARGB_8888。很可能是 YUV420p 之类的东西,甚至可能是 JPEG 压缩数据。

    首先,确定你的情况。

    您有两个选择:对于 YUV(这是一种交错格式)使用某种转换格式,对于 JPEG,为您的 arg0 数组创建一个内存流并从中读取位图。

    这里有类似的问题:BitmapFactory null issue in android

    这里甚至还有一个解决方案:Android byte[] to image in Camera.onPreviewFrame

    编辑:您只需稍微修改数组中的字节即可。

    wiki article 解释了如何将 YUV422/420 转换为 YUY2,这是 Android API 所需的。 在那里搜索“Y'UV422也可以表示YUY2 FourCC格式代码”子串。

    【讨论】:

    • 感谢您解释问题的方式。我尝试使用第二个链接,当我按下保存图片按钮时,这给了我强制关闭错误。检查我为 logcat 编辑的问题
    • 我发现了这个问题,我正在工作 onPicturetaken() (这样的白痴没有提到),所以它不需要那个转换。上面提到的可以在 onPreview() 中工作。感谢@Viktor Latypov 的完美回答
    猜你喜欢
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 2013-01-14
    相关资源
    最近更新 更多