繁体   English   中英

图像裁剪质量下降

[英]Losing a lot of quality on image crop

我正在从相机捕获图像,然后将其保存为sqlite数据库。

之后,我允许用户裁剪。 整个过程后质量非常非常差。

我正在Nexus7上进行测试,我知道它的前置摄像头很差,但是在作物应用打开后,图片很小。 作物活动需要大约1/5的屏幕,我不知道为什么。

onActivityResult发生的情况(捕获拍摄的照片)

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {  
        Bitmap bitmap = (Bitmap) data.getExtras().get("data");          
        String path = Images.Media.insertImage(getActivity().getContentResolver(), bitmap, "Title", null);
        Uri imageUri = Uri.parse(path);
        if (!doCrop(imageUri)) saveNewAvatar(bitmap);
    }
}

这是doCrop(Uri uri)方法:

private void doCrop(final Uri imageUri) {
    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setType("image/*");

    List<ResolveInfo> list = getActivity().getPackageManager().queryIntentActivities( intent, 0 );

    int size = list.size();

    intent.setData(imageUri);

    intent.putExtra("aspectX", 1);
    intent.putExtra("aspectY", 1);
    intent.putExtra("scale", true);
    intent.putExtra("return-data", true);

      if (size == 1) {
          Intent i = new Intent(intent);
          ResolveInfo res = list.get(0);

          i.setComponent( new ComponentName(res.activityInfo.packageName, res.activityInfo.name));

          startActivityForResult(i, CROP);
      }
}

整个过程后的画面很小。

编辑:做了一些研究,并遵循了该线程的代码

最终这样:

关于代码,有很多错误(例如: 也许可行,但这不是您在Android上执行此类操作的方式 ),但是问题的根源是您从data密钥中额外读取了图像。 Extras中的版本只是一个缩影,而且质量很低。

您需要做的是更改调用相机的方式。 这有点违反直觉,但是您并没有获得从相机拍摄的图片的网址,而恰恰相反:将网址传递到相机,它将尝试将图片放在此处。

该URL可能指向SD卡或您自己的ContentProvider

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM