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

dig*_*ino 1 size camera android image

我正在尝试使用Android Camera API但是当我拍照时,它的分辨率与我的Camera对象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);
    }
Run Code Online (Sandbox Code Playgroud)

我如何在注释行中说,而不是previewSize我想拍摄照片配置到我的相机的pictureSize

dig*_*ino 10

好吧,花了一些时间调试后我发现了什么问题.

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

示例:

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

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

我创建了一个supportedPreviewSize和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 ]
Run Code Online (Sandbox Code Playgroud)

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