java - Android:加载照片时出错

标签 java android

我正在尝试在拍照后从相机中裁剪图像,所以我有这个解决方案:

这是启动相机的onClick事件

public void onClick(View v) {

  PackageManager pm = getPackageManager();

    if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {

   Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

   i.putExtra(MediaStore.EXTRA_OUTPUT, MyFileContentProvider.CONTENT_URI);

   startActivityForResult(i, CAMERA_RESULT);

  } else {

   Toast.makeText(getBaseContext(), "Camera is not available", Toast.LENGTH_LONG).show();

  }   }

//这是onActivityResult

@Override

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

  super.onActivityResult(requestCode, resultCode, data);

  Log.i(Tag, "Receive the camera result");

    if (resultCode == RESULT_OK && requestCode == CAMERA_RESULT) {

        performCrop();

   }else if( requestCode == 5){

       String path = this.imageFileUri.getPath();
       //Bitmap bit = decodeSampledBitmapFromPath(path, 600, 600);


     int rotate = 0;
     try {
         ExifInterface exif = new ExifInterface(
                 this.imageFileUri.getPath());
         int orientation = exif.getAttributeInt(
                 ExifInterface.TAG_ORIENTATION,
                 ExifInterface.ORIENTATION_NORMAL);

         switch (orientation) {
         case ExifInterface.ORIENTATION_ROTATE_270:
             rotate = 270;
             break;
         case ExifInterface.ORIENTATION_ROTATE_180:
             rotate = 180;
             break;
         case ExifInterface.ORIENTATION_ROTATE_90:
             rotate = 90;
             break;
         }
     } catch (Exception e) {
         e.printStackTrace();
     }


     Matrix matrix = new Matrix();
     matrix.postScale(0.5f, 0.5f);
     matrix.postRotate(rotate);

    // Bitmap bitmap = decodeFile(out);
     Bitmap bitmap = decodeSampledBitmapFromPath(path, 600, 600);

     //Bitmap mBitmap = BitmapFactory.decodeFile(out.getAbsolutePath());
    bitmap = Bitmap.createBitmap(bitmap, 1, 1, bitmap.getWidth() - 1, bitmap.getHeight() - 1,matrix,true);



   imageView1.setImageBitmap(bitmap);

  }

 }

这是执行裁剪方法

private void performCrop() {
     Intent var1 = new Intent("com.android.camera.action.CROP");
     File out = new File(getFilesDir(), "newImage.jpg");
     if(!out.exists()) {

            Toast.makeText(getBaseContext(),

              "Error while capturing image", Toast.LENGTH_LONG)

              .show();

            return;}
     this.imageFileUri = Uri.fromFile(out);
     var1.setDataAndType(this.imageFileUri, "image/*");
     System.out.println(this.imageFileUri.getPath());
     var1.putExtra("crop", "true");
     var1.putExtra("scale", true);
     var1.putExtra("return-data", false);
     var1.putExtra("output", this.imageFileUri);
     this.startActivityForResult(var1, 5);
  }

当前的问题是,从相机获取结果然后加载裁剪方法后,它显示加载照片时发生错误。无法启动照片编辑器。

我查看了我的代码,从这里看来一切正常。 请帮助我解决我的错误。

谢谢。

最佳答案

您好,请将此库用于图像裁剪 https://github.com/jdamcd/android-crop

关于java - Android:加载照片时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32521014/

相关文章:

java - 从文本文件中读取数据

java - Spring Data Cassandra 和 PreparedStatementCache

android - 什么是 View 层次结构?

android - 如何使用 PDFBox for Android 从 tiff 图像创建 pdf?

java - Android Studio - 应用程序崩溃

java - 如何修复丢失 token 错误

java - 观察完成后在 View 中显示 AlertDialog

java - org.apache.catalina.LifecycleException : Failed to start component [StandardEngine[Catalina]. 标准主机

java - 无法发送事件错误

安卓穿戴: DataItem API vs Channel API