Android Camera开发实践(1)预览

本文详细探讨了Android Camera预览设置,包括设置预览Surface、启动预览,以及相机预览方向的校正,涉及手机自然方向、局部坐标系、显示方向和摄像头传感器方向。此外,还介绍了如何进行摄像头切换和拍照功能的实现。
摘要由CSDN通过智能技术生成

mCamera.setParameters(parameters);
}
}
}
}

1.4设置预览surface,即接收并显示图像的容器

实际设置的是surfaceHolder

private void setPreviewSurface(SurfaceHolder previewSurface) {
if (mCamera != null && previewSurface != null) {
try {
mCamera.setPreviewDisplay(previewSurface);
} catch (IOException e) {
e.printStackTrace();
}
}
}

1.5启动预览

private void startPreview() {
if (mCamera != null && mPreviewSurface != null) {
// 增加callback,便于buffer复用
mCamera.setPreviewCallbackWithBuffer(new Camera.PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
// 使用完buffer之后回收复用
camera.addCallbackBuffer(data);
}
});
mCamera.startPreview();
}
}

二、相机预览方向校正

因为手机摄像头硬件的设计,不做额外的处理,相机预览的图像角度是错误的,准确的说竖屏状态下,逆时针偏了90°。

上文有一句代码,设置相机预览的旋转方向,此处补充说明.

mCamera.setDisplayOrientation(getCameraDisplayOrientation(mCameraInfo));

完整代码出自于google/Android官方文档

private int getCameraDisplayOrientation(Camera.CameraInfo cameraInfo) {
int roration = getWindowManager().getDefaultDisplay().getRotation();
// 屏幕显示方向角度(相对局部坐标Y轴正方向夹角)
int degrees = 0;
switch (roration) {
case Surface.ROTATION_0:
degrees = 0;
break;
case Surface.ROTATION_90:
degrees = 90;
break;
case Surface.ROTATION_180:
degrees = 180;
break;

case Surface.ROTATION_270:
degrees = 270;
break;
}
int result;

if (c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值