2012-06-21 3 views
5

meine erste Frage hier! Ich habe ein Problem mit einem Codeabschnitt, der eine Kameraabsicht mit den zusätzlichen Ausgabeoptionen startet, und dann versucht das Aktivitätsergebnis, das Bild zu skalieren. Was passiert, ist, dass eine Nullpointer-Ausnahme in der Größenänderungsfunktion beim Rückruf ausgelöst wird.Android Bild Größe nach Kamera Absicht Callback

Das ursprüngliche große Bild ist immer noch auf dem Dateisystem gespeichert, wie ich aus dem Dateisystem zugreifen kann.

Die Originalkamera JPEG ist 2560x1920 in Größe und das Telefon im Einsatz ist ein Google Nexus.

Ich habe keine klare Vorstellung, warum die Größenänderung nicht funktioniert, hat jemand Einblick?

Hier einige Code:

Die Takepicture-Funktion, die auch die Dummy-Datei erstellt:

 public boolean takePicture() { 

      Log.e(TAG, "takePicture interface function"); 
      String FileUri = Environment.getExternalStorageDirectory() + "/samples/"; 
      File file = new File(FileUri,"picture"+ pictureNumber +".jpg"); 
      try { 
       file.createNewFile(); 
       } catch (IOException e) { 
       e.printStackTrace(); 
       } 
       Uri outputFileUri = Uri.fromFile(file); 

      Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
      startActivityForResult(cameraIntent, CAMERA_REQUEST); 
      Log.e(TAG, "intent started"); 
      return true; 
     } 

Das Ergebnis Callback-Funktion auf Aktivität:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

     // handle the camera request returns and handle back button in camera. 

     if (requestCode == CAMERA_REQUEST && resultCode == RESULT_CANCELED) { 
      Toast toast = Toast.makeText(this,"Canceled, no picture taken.", 1000); 
      toast.show(); 
      return; 
      } 

     else if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) { 

      Log.e(TAG, "Camera intent return"); 

      Bitmap scaledphoto = null; 
      int height = 300; 
      int width = 300;  

      Bitmap photo = BitmapFactory.decodeFile(APP_DATA_PATH + "/samples/picture" + pictureNumber + ".jpg"); 
      Log.e(TAG, "Picture fetched"); 

      scaledphoto = Bitmap.createScaledBitmap(photo, height, width, true); 


      Log.e(TAG, "Picture scaled"); 

      saveImageToFile(scaledphoto, "picture" + pictureNumber + ".jpg"); 


      Log.e(TAG, "Scaled picture saved"); 

      myWebView.loadUrl("javascript:pictureTaken(\""+ pictureLoc + "\")"); 

      pictureNumber++; 

Und hier ist der LogCat:

06-21 14:59:13.496: E/AndroidRuntime(6130): FATAL EXCEPTION: main 
06-21 14:59:13.496: E/AndroidRuntime(6130): java.lang.RuntimeException: Failure  delivering result ResultInfo{who=null, request=1888, result=-1, data=null} to activity {test.test/test.test.CameraIntentTestActivity}: java.lang.NullPointerException 
06-21 14:59:13.496: E/AndroidRuntime(6130):  at android.app.ActivityThread.deliverResults(ActivityThread.java:2980) 
06-21 14:59:13.496: E/AndroidRuntime(6130):  at android.app.ActivityThread.handleSendResult(ActivityThread.java:3023) 
06-21 14:59:13.496: E/AndroidRuntime(6130):  at android.app.ActivityThread.access$1100(ActivityThread.java:123) 
06-21 14:59:13.496: E/AndroidRuntime(6130):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1177) 
06-21 14:59:13.496: E/AndroidRuntime(6130):  at android.os.Handler.dispatchMessage(Handler.java:99) 
06-21 14:59:13.496: E/AndroidRuntime(6130):  at android.os.Looper.loop(Looper.java:137) 
06-21 14:59:13.496: E/AndroidRuntime(6130):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
06-21 14:59:13.496: E/AndroidRuntime(6130):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-21 14:59:13.496: E/AndroidRuntime(6130):  at java.lang.reflect.Method.invoke(Method.java:511) 
06-21 14:59:13.496: E/AndroidRuntime(6130):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
06-21 14:59:13.496: E/AndroidRuntime(6130):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
06-21 14:59:13.496: E/AndroidRuntime(6130):  at dalvik.system.NativeStart.main(Native Method) 
06-21 14:59:13.496: E/AndroidRuntime(6130): Caused by: java.lang.NullPointerException 
06-21 14:59:13.496: E/AndroidRuntime(6130):  at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:432) 

Antwort

2

ändern

Bitmap photo = BitmapFactory.decodeFile(APP_DATA_PATH + "/samples/picture" + pictureNumber + ".jpg"); 

Um

Bitmap photo = (Bitmap) data.getExtras().get("data"); 
+0

Die Bilder, die ich mit dieser Methode alle scheinen, mega verschwommen zu sein, als ob von einem kleineren Bitmap-Upscaling, während die Bilder, die gerade in den Ordner mit extra gespeichert werden Ausgabe scheint, volle Entschließung jpegs zu sein. Es funktioniert, aber scheint nicht der beste Weg zu sein, um mittelauflösende JPEGs zu bekommen, die ich möchte, zB 400x400. – TeraTon

+0

Ich fürchte, es ist wegen imageSize nicht zu entschlüsseln. –

+0

Ja, es scheint, als ob die Bildgröße nur der Grund dafür ist, dass es schief geht. Als ich Stackoverflow durchsucht habe, habe ich ein paar Leute mit dem gleichen Problem gefunden. Danke für den Tipp! – TeraTon