我在相机预览时遇到歪斜图像的问题。
我的目标是在其容器( FrameLayout )上扩展并填写相机预览。
当我以setPreviewSize()
作为16:9并且当我尝试通过将其大小设置为16:9来扩展 FrameLayout 上的图像时,我感到非常困惑(此视图可能更大比显示屏尺寸以填满整个屏幕区域)相机预览上的图像开始倾斜。
但是,如果I setPreviewSize()
为16:9且FrameLayout为4:3,则相机预览图像完全没有偏差。
Ex.Secenario#1 Image Skew
preview size -> w: 1920 h: 1080 (16:9)
display size -> w: 1774 h:1080 (887:540)
container size -> w: 1920 h: 1080 (16:9)
Ex.Secenario#2 Image Not Skew
preview size -> w: 1920 h: 1080 (16:9)
display size -> w: 1774 h:1080 (887:540)
container size -> w: 1800 h: 1350 (4:3)
那么,相机预览的宽高比与其容器之间的关系是什么( FrameLayout )我现在很困惑为什么16:9预览尺寸与容器不兼容大小为16:9。或者我想念一些事情,请指教。
答案 0 :(得分:1)
我发现意外行为来自surfaceChanged()
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
try {
mCamera.stopPreview();
} catch (Exception e){
// ignore: tried to stop a non-existent preview
}
// Before do any configuration to camera
// StopPreview() and StartPreview()
// after finish it
try {
mCamera.setPreviewDisplay(mHolder);
mCamera.startPreview();
} catch (Exception e){
Log.d(TAG, "Error starting camera preview: " + e.getMessage());
}
}
重要提示:某些相机功能无法随意更改。在 特别是,更改相机预览的大小或方向 要求您首先停止预览,更改预览大小,以及 然后重新启动预览。从Android 4.0开始(API级别14) 无需重新开始预览即可更改预览方向。
我只是误解了android文档中的这个重要说明。因此,如果您使用停止然后配置相机预览分辨率或调整父布局与相机预览的宽高比相同。开始预览后,不会发生歪斜图像预览。