【问题标题】:Picture taken from camera getting blur从相机拍摄的照片变得模糊
【发布时间】:2016-07-08 02:23:01
【问题描述】:

我在我的应用程序中集成了裁剪图像库,该库具有拍摄和使用通过相机拍摄的照片的功能。我的开发人员已经按预​​期完成了它,但是现在当我通过相机拍照而不是在拍照并将其设置在裁剪页面上进行检查时,在我们设置它之前它变得模糊。我的开发人员超出了某些任务的覆盖范围。我已经询问了库开发人员,他们为我提供了如下集成代码的解决方案

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);Uri outputFileUri = Uri.fromFile(new File(context.getExternalCacheDir().getPath(), "pickImageResult.jpeg"));intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

我的开发人员在我的应用程序中集成了如下代码

    @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                            if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
                                startActivityForResult(takePictureIntent,REQ_PHOTO_CAMERA);
                            }
                        }

以及下面的方法

    public final int REQ_PHOTO_CAMERA=243;
public final int REQ_PHOTO_GALLERY=346;
public final int REQ_APP_GALLERY=427;

public final int ACTION_CHANGE_BACKGROUND=1;
public final int ACTION_CHANGE_AUTHOR=2;

private int mChangeAction;

public void onActivityResult(int req,int res,Intent data){
    if(res==RESULT_OK){
        if(req==REQ_PHOTO_CAMERA){
            Bitmap  cameraImg = (Bitmap) data.getExtras().get("data");
            cropAndSaveImage(cameraImg);
            //updateCustomImage(cameraImg);
        }else if(req==REQ_PHOTO_GALLERY){

            try {
                Bitmap imgGallery = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(), data.getData());
               // updateCustomImage(imgGallery);
                cropAndSaveImage(imgGallery);
            } catch (IOException e) {
               // e.printStackTrace();
            }
        }else if (req == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
            CropImage.ActivityResult result = CropImage.getActivityResult(data);
            Uri resultUri = result.getUri();
            Log.e("ImageUrl",resultUri.getPath());
            updateCustomImage(BitmapFactory.decodeFile(resultUri.getPath()));
        }else if(req==REQ_APP_GALLERY){

            String imgPath=data.getStringExtra("ImagePath");
            try {
                InputStream inputStream=getAssets().open(imgPath);
                Bitmap image=BitmapFactory.decodeStream(inputStream);
                cropAndSaveImage(image);
            } catch (IOException e) {
            }

        }
    }
}



public void cropAndSaveImage(Bitmap imgPicked){
    ImageLoader.getInstance().saveTempImage(imgPicked);
    CropImage.activity(ImageLoader.getInstance().getTempImageUri())
            .setInitialCropWindowPaddingRatio(0)
            .setFixAspectRatio(false)
            .setAspectRatio(1,2)
            .setGuidelines(CropImageView.Guidelines.ON)
            .start(this);
}

让我知道我错过了什么?

注意:我们使用了这个库:Link

谢谢

【问题讨论】:

  • 您还应该检查这是否发生在不同的设备上。很难判断它是否只是由低质量的相机或某种意外的代码行为引起的。
  • 嗨!谢谢先生 !我已经签入了 4-5 个设备并在所有设备中遇到了问题,库开发人员也给出了我在第一个代码块中编写的解决方案,但我不知道如何将它附加到我的代码中
  • 这段代码产生了一个模糊的图像Bitmap cameraImg = (Bitmap) data.getExtras().get("data");,因为它只用于缩略图。
  • 那我该如何解决呢?
  • 而是使用 URI 获取位图,而不是来自 Intent 的位图。

标签: java android android-camera


【解决方案1】:

您使用相机拍摄的原始图像将在这里-

Uri outputFileUri = Uri.fromFile(new File(context.getExternalCacheDir().getPath(), "pickImageResult.jpeg"));

在这个文件中。

Bitmap cameraImg = (Bitmap) data.getExtras().get("data"); 只是返回的缩略图。

【讨论】:

  • 只保留您在发送捕获图像意图时提供的文件的位置,然后在 onActivityResult(int req,int res,Intent data) 中使用该文件而不是 Intent 数据中的位图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多