为什么图像变得模糊?

时间:2015-04-06 12:07:17

标签: android image android-camera

我正在尝试开发一款使用Android相机API的应用。但是,当我使用应用程序图像拍摄图像时,模糊不清。

使用谷歌相机应用程序的图像:

enter image description here

使用我的相机应用程序的图像:

enter image description here

相机参数部分:

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());
        }

    }

5 个答案:

答案 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