我正在尝试开发一款使用Android相机API的应用。但是,当我使用应用程序图像拍摄图像时,模糊不清。
使用谷歌相机应用程序的图像:
使用我的相机应用程序的图像:
相机参数部分:
Camera.Parameters param;
param = camera.getParameters();
param.setFocusMode(Parameters.FOCUS_MODE_FIXED);
param.setPictureFormat(ImageFormat.JPEG);
param.setJpegQuality(100);
camera.setParameters(param);
camera.startPreview();
图片回调部分:
public void onPictureTaken(byte[] data, Camera camera) {
bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
camera.release();
preview.setVisibility(View.INVISIBLE);
image.setVisibility(View.VISIBLE);
image.setImageBitmap(bitmap);
File pictureFile = getOutputMediaFile();
if (pictureFile == null) {
Log.d("PictureCall",
"Error creating media file, check storage permissions");
return;
}
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
fos.write(data);
fos.close();
} catch (FileNotFoundException e) {
Log.d("File Excep :", "File not found: " + e.getMessage());
} catch (IOException e) {
Log.d("File Excep :", "Error accessing file: " + e.getMessage());
}
}
答案 0 :(得分:1)
Camera.Parameters parameters = camera.getParameters();
List<Camera.Size> sizes = parameters.getSupportedPictureSizes();
for (Camera.Size size : sizes) {
if (size.width > w || size.height > h) {
w = size.width;
h = size.height;
}
}
parameters.setPictureSize(w, h);
答案 1 :(得分:0)
为什么不做这样的事情:
private static final int CAMERA_PICTURE = 3333;
Uri selectedImageUri;
你的相机上的这样做
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_PICTURE);
并在onActivityResult上编写此代码
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode==CAMERA_PICTURE ) {
selectedImageUri = data.getData();
if(selectedImageUri!=null){
Bitmap bmp=BitmapFactory.decodeStream(getContentResolver().openInputStream(selectedImageUri));
//perform operations with your bitmap here
}
}
}
}
此方法将为您提供全分辨率图像,而不是缩略图或模糊图像 干杯!!
答案 2 :(得分:0)
评论您的相机jpeg质量:
param.setJpegQuality(100)
答案 3 :(得分:0)
我认为您可能希望通过params.getSupportedPictureSizes()
查询支持的尺寸,选择最大尺寸,然后在设置相机参数时设置params.setPictureSize()
来强制在图片捕获上输出图像分辨率发布的代码,虽然我觉得很奇怪,默认分辨率会像你发布的样本那么小。
答案 4 :(得分:0)
您需要使用setPictureSize()
setPreviewSize()
方法,并设置最佳图片尺寸&amp;可从getSupportedPreviewSizes()
获取预览尺寸。
检查以下方法的代码(来自此answer):
s2