我尝试使用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配置为我的相机
答案 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 ]
我希望这将有助于将来遇到同样问题的人。