【问题标题】:How can I specify the taken image quality on Android? [duplicate]如何在 Android 上指定拍摄的图像质量? [复制]
【发布时间】:2018-03-12 09:50:37
【问题描述】:

我找到了这两部分代码,如何在 Android 中从相机中拍照:

onCreate() 方法内部:

        Button capture;

        capture.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                startActivityForResult(cameraIntent, TAKE_PHOTO_CODE);
            }
        });

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == TAKE_PHOTO_CODE && resultCode == RESULT_OK) {
        Bundle extras = data.getExtras();
        Bitmap imageBitmap = (Bitmap) extras.get("data");

    }
}

它可以工作,但问题是,结果图像的质量非常低!我想知道如何指定要拍摄的图像质量?

还想知道,bitmap 是否还有其他选项可以存储或处理图像?

编辑:

这是我在按下捕获按钮之前看到的:

这是按下捕获按钮后所需要的(它会降低质量):

我必须说,当我用手机拍照时(我的意思是在这个应用程序之外)效果很好,但在我编写的应用程序中,它会降低拍摄的图像质量!

**另外我还有一个问题...如何删除拍摄图像后显示的第二页(我的意思是该页面显示RETRY-OK 选项)。

【问题讨论】:

  • 如果 Intent 返回 "data",它是一个很小的缩略图,而不是完整图像:请参阅 stackoverflow.com/a/41344412/192373,它考虑了 Android 7 及更高版本的要求。

标签: android android-camera-intent image-quality


【解决方案1】:

检查以下解决方案以解决您的问题。

 public static File IMAGE_PATH = null;
     public static final int CAMERA_REQUEST = 100;
         private void openCameraApp(Context mContext) {
            Intent picIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE).addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);


            String file_path = Environment.getExternalStorageDirectory().toString() +
                    "/" + mContext.getResources().getString(R.string.app_name);

            File dir = new File(file_path);
            if (!dir.exists())
                dir.mkdirs();
            IMAGE_PATH = new File(dir, mContext.getResources().getString(R.string.app_name) +  System.currentTimeMillis() + ".png");


            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                picIntent.putExtra(MediaStore.EXTRA_OUTPUT, FileProvider.getUriForFile(mContext, mContext.getPackageName()+".fileprovider", IMAGE_PATH));
            }
            else {
                picIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(IMAGE_PATH));
            }

            ((Activity) mContext).startActivityForResult(picIntent, CAMERA_REQUEST);

        }

【讨论】:

  • 你说我必须保存图像才能获得更好的结果?
  • 是的,您必须保存图像以获得更好质量的图像。但是,如果您不想保存图像,请保留图像路径,直到完成与图像相关的任务,然后使用图像路径删除图像
  • 我在帖子末尾添加了一个新问题,你知道吗?
  • 您不能删除图像预览屏幕,因为它是内置的相机功能,我们不能以编程方式覆盖它。
  • 但我在其他应用中看到,当我拍照时,它们没有显示此页面
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-14
  • 2016-05-18
  • 1970-01-01
  • 1970-01-01
  • 2017-08-07
  • 1970-01-01
相关资源
最近更新 更多