2012-07-16 2 views
1

Je suis en train de convertir en bitmap, mais après la conversion, il me donne l'image de tableau d'octets image noire, pourquoi?image tableau d'octets bitmap

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

Je souhaite que l'image de la caméra soit convertie en bitmap. Toute suggestion. Merci d'avance!!

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) 

Répondre

3

Malheureusement, le format de l'image de la caméra n'est pas ARGB_8888. Très probablement, c'est quelque chose comme YUV420p ou peut-être même les données compressées JPEG.

Tout d'abord, déterminer ce qui est votre cas.

Vous avez deux options: pour YUV (qui est un format entrelacé) utilisez un format de conversion et pour JPEG créez un flux de mémoire pour votre tableau arg0 et lisez le bitmap de celui-ci.

Il y a des questions similaires ici: BitmapFactory null issue in android

Et il y a même une solution ici: Android byte[] to image in Camera.onPreviewFrame

EDIT: il vous suffit de mutiler les octets dans votre tableau un peu.

Cette wiki article explique comment convertir le YUV422/420 à YUY2, requis par l'API Android. La recherche de "Y'UV422 peut également être exprimée dans la sous-chaîne YUY2 FourCC format code".

+0

J'apprécie la façon dont vous nous avez expliqué la question. J'ai essayé d'utiliser le deuxième lien, ce qui me donne une erreur de fermeture de force lorsque j'ai appuyé sur le bouton Enregistrer l'image. Vérifiez ma question pour logcat – Numair

+0

éditée j'ai compris la question, je travaillais ** onPicturetaken() ** (un idiot pour ne pas mentionner que), il doesnot besoin que la conversion. Ce qui précède peut fonctionner dans ** onPreview() **. Merci @Viktor Latypov pour vos parfaits ans – Numair