如何在 Android 上指定拍摄的图像质量?
How can I specify the taken image quality on Android?
我在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
存储或处理图像吗?
编辑:
这是我在按下捕捉按钮之前看到的:
这是按下捕捉按钮后的画面(这会降低画质):
我必须说,当我用我的phone拍照时(我的意思是在这个应用程序之外)它工作得很好,但是在我写的应用程序里面,它降低了拍摄的图像质量!
**我还有另一个问题...如何删除拍摄图像后显示的第二页(我的意思是该页面显示 RETRY-OK
选项)。
检查以下解决方案以解决您的问题。
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);
}
我在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
存储或处理图像吗?
编辑:
这是我在按下捕捉按钮之前看到的:
这是按下捕捉按钮后的画面(这会降低画质):
我必须说,当我用我的phone拍照时(我的意思是在这个应用程序之外)它工作得很好,但是在我写的应用程序里面,它降低了拍摄的图像质量!
**我还有另一个问题...如何删除拍摄图像后显示的第二页(我的意思是该页面显示 RETRY-OK
选项)。
检查以下解决方案以解决您的问题。
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);
}