2012-06-21 11 views
5

mi primera pregunta aquí! Tengo un problema con un fragmento de código que inicia la intención de la cámara con las opciones de salida adicionales y luego el resultado de actividad intenta cambiar el tamaño de esa imagen. lo que sucede es que se lanza una excepción nullpointer en la función de cambio de tamaño en la devolución de llamada.Cambiar el tamaño de la imagen de Android después de llamar a la cámara intento

La imagen grande original todavía se guarda en el sistema de archivos, ya que puedo acceder a ella desde el sistema de archivos.

El jpeg original de la cámara tiene un tamaño de 2560x1920 y el teléfono en uso es uno de Google Nexus.

No tengo una idea clara de por qué el cambio de tamaño no funciona, ¿alguien tiene alguna idea?

Aquí hay algo de código:

La función takePicture que también crea el archivo de prueba:

 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 función consecuencia de devolución de llamada de la actividad:

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

Y aquí está la 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) 

Respuesta

2

Cambio

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

Para

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

Las fotos que se obtiene con este método todos parecen estar de mega borrosa, como si upscaled de un mapa de bits más pequeño, mientras que las imágenes que se guardan directamente a la carpeta con EXTRA salida parece ser jpegs de resolución completa. Funciona, pero no parece ser la mejor manera de obtener jpegs de resolución media que me gustaría, es decir, 400x400. – TeraTon

+0

Me temo que no está decodificando debido a imageSize. –

+0

Sí, parece que el tamaño de la imagen es solo la razón por la que está fallando, ya que al buscar a través de stackoverflow encontré un par de tipos con el mismo problema. ¡Gracias por el consejo! – TeraTon

Cuestiones relacionadas