为什么Camera.PictureCallback()的图像分辨率是PreviewSize的大小?

时间:2012-02-06 12:37:39

标签: android camera size image

我尝试使用Android Camera API,但是当我拍照时,它的分辨率与我的相机对象previewSize分辨率相同。

解释的一些代码:

private Camera mCamera;
private Camera.PictureCallback mPictureCallback;

...
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
...
Camera.Parameters p = mCamera.getParameters();
        p.setPreviewSize(mPreviewWidth, mPreviewHeight);
        p.setPictureSize(mPictureWidth,mPictureHeight);
mCamera.setParameters(p);
...
}

public void onPictureTaken(byte[] imageData, Camera c) {
                Bitmap bitmapPicture = BitmapFactory.decodeByteArray(imageData, 0, imageData.length);
                bitmapPicture.getWidth(); //At this point the width is the same as mPreviewWidth and I want it to be mPictureWidth
}
/**
* This function is called when the user touches the surfaceview
*/
public void clickCamera(View v){
        mCamera.takePicture(null, mPictureCallback, mPictureCallback);
    }

我是如何在注释行中说的,而不是previewSize我想拍照,并将pictureSize配置为我的相机

1 个答案:

答案 0 :(得分:10)

好吧,经过一段时间的调试后,我发现了什么问题。

关键是,如果您的预览与其兼容,则只能设置图片大小。兼容我的意思是它们的分辨率的aspec比(宽高比)是相同的。

示例:

宽屏预览分辨率仅支持宽屏图像分辨率。

如果您为预览显示错误的分辨率(使用普通屏幕图片大小进行宽屏预览),则无法正确设置图片大小。

我创建了一个supportedPreviewSize vs supportedPictureSize

的示例
preview 800 x 600
    2048 x 1536 [ ok ]
    1600 x 1200 [ ok ]
    800  x 600  [ ok ]
    2048 x 1232 [ fail - 2048 x 1536 ]
    1600 x 960  [ fail - 1600 x 1200 ]
    1024 x 600  [ fail - 1600 x 1200 ]

preview 1024 x 600
    2048 x 1536 [ fail - 2048 x 1232 ]
    1600 x 1200 [ fail - 2048 x 1232 ]
    800  x 600  [ fail - 1024 x 600  ]
    2048 x 1232 [ ok ]
    1600 x 960  [ ok ]
    1024 x 600  [ ok ]

我希望这将有助于将来遇到同样问题的人。