2012-06-21 9 views
5

la mia prima domanda qui! Ho un problema con un pezzo di codice che avvia un obiettivo della videocamera con le opzioni di output extra e quindi il risultato dell'attività tenta di ridimensionare quell'immagine. ciò che sta accadendo è che un'eccezione nullpointer viene lanciata nella funzione di ridimensionamento al callback.Ridimensionare l'immagine Android dopo il richiamo della telecamera callback

L'immagine grande originale viene ancora salvata sul file system, poiché posso accedervi dal file system.

La videocamera originale jpeg ha una dimensione di 2560x1920 e il telefono in uso è di tipo google nexus.

Non ho un'idea chiara sul motivo per cui il ridimensionamento non funziona, qualcuno ha qualche intuizione?

Ecco po 'di codice:

La funzione takePicture che crea anche il file fittizio:

 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; 
     } 

La funzione di risultato di callback sull'attività:

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++; 

Ed ecco il 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) 

risposta

2

Change

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

Per

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

Le immagini che ottengo con questo metodo tutti sembrano essere mega sfocata come se upscaled da una bitmap più piccola, mentre le immagini che vengono salvate direttamente alla cartella con in più l'output sembra essere jpeg a piena risoluzione. Funziona, ma non sembra il modo migliore per ottenere jpeg a media risoluzione che vorrei, ad esempio 400x400. – TeraTon

+0

Ho paura che non riesca a decodificare a causa di imageSize. –

+0

Sì, sembra che la dimensione dell'immagine sia solo la ragione per cui non ce l'ha fatta, mentre cercavo attraverso lo stackoverflow ho trovato un paio di ragazzi con lo stesso problema. Grazie per il consiglio! – TeraTon

Problemi correlati