2012-06-21 42 views
5

câu hỏi đầu tiên của tôi ở đây! Tôi có một vấn đề với một đoạn mã mà bắt đầu một ý định máy ảnh với các tùy chọn đầu ra thêm và sau đó kết quả hoạt động cố gắng để thay đổi kích thước hình ảnh đó. những gì đang xảy ra là một ngoại lệ nullpointer được ném vào chức năng thay đổi kích cỡ tại cuộc gọi lại.Thay đổi kích thước hình ảnh Android sau khi gọi lại máy ảnh

Ảnh lớn ban đầu vẫn được lưu trên hệ thống tệp, vì tôi có thể truy cập hình ảnh đó từ hệ thống tệp.

Máy ảnh gốc jpeg có kích thước 2560x1920 và điện thoại đang sử dụng là thiết bị google nexus.

Tôi không có ý tưởng rõ ràng asto lý do tại sao thay đổi kích thước không hoạt động, bất kỳ ai có bất kỳ thông tin chi tiết nào?

Dưới đây là một số mã:

Các takePicture chức năng đó cũng tạo ra các tập tin dummy:

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

Các đối với hoạt động chức năng kết quả callback:

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

Và đây là 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) 

Trả lời

2

Thay đổi

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

Để

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

Những hình ảnh tôi nhận được với phương pháp này tất cả dường như là lớn mờ như thể upscaled từ một bitmap nhỏ hơn, trong khi những hình ảnh được lưu thẳng vào thư mục với thêm đầu ra có vẻ là jpeg có độ phân giải đầy đủ. Nó hoạt động, nhưng dường như không phải là cách tốt nhất để có được jpegs độ phân giải trung bình mà tôi muốn, tức là 400x400. – TeraTon

+0

Tôi sợ nó không giải mã được vì imageSize. –

+0

Vâng, nó có vẻ như kích thước hình ảnh chỉ là lý do tại sao nó thất bại, như tìm kiếm thông qua stackoverflow tôi tìm thấy một vài kẻ với cùng một vấn đề. Cảm ơn vì tiền hỗ trợ! – TeraTon

Các vấn đề liên quan