版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_40391500/article/details/79931089
最近在做一个项目用到设置摄像头预览是设置照片颜色黑白画面,做下笔记
Camera 类下Parameters类中封装了我们需要的大部分功能:
1、setPictureFormat()方法用于设置相机照片的格式,其参数是一个字符型参数,位于PixelFormat类中,我们在这里选择PixelFormat.JPEG。
2、setSceneMode()方法用于设置相机场景类型,其参是是一个字符型参数,位于Parameters类中,以SCENE_MODE_开头。
3、setZoom()方法用于设置相机焦距,其参数是一个整型的参数,该参数的范围是0到Camera.getParameters().getMaxZoom()。
4、setPictureSize()方法用于设置相机照片的大小,参数为整型。
5、setWhiteBalance(),方法用于设置相机照片白平衡,其参数是一个字符型参数,位于Parameters类中,以WHITE_BALANCE开头。
6、setJpegQuality()方法用于设置相机照片的质量,其参数是一个整型参数,取值范围为1到100。
7、setFlashMode()方法用于设置闪光灯的类型,其参数是一个字符型参数,位于Parameters类中,以FLASH_MODE_开头。
8、setColorEffect()方法用于设置照片颜色特效的类型,其参数是一个字符型参数,位于Parameters类中,以EFFECT_开头。
public class PreviewActivity extendsActivity implements SurfaceHolder.Callback {
private SurfaceView m_prevewview;
public static Camera m_camera;
private SurfaceHolder m_surfaceHolder;
private Camera.Parameters parameters;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.preview);
m_prevewview = (SurfaceView) findViewById(R.id.SurfaceViewPlay);
m_surfaceHolder = m_prevewview.getHolder(); // 绑定SurfaceView,取得SurfaceHolder对象
m_surfaceHolder.setFixedSize(width, height); // 预览大小設置
m_surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
m_surfaceHolder.addCallback(this);
}
@Override
public void surfaceCreated(SurfaceHolder arg0) {
try {
m_camera = Camera.open();
m_camera.setPreviewDisplay(m_surfaceHolder);
parameters = m_camera.getParameters();
List<Camera.Size> sizes = parameters.getSupportedPreviewSizes();
for (int i = 0; i < sizes.size(); i++) {
Camera.Size size = sizes.get(i);
System.out.println("width=" + size.width + ",height="
+ size.height);
}
parameters.setPreviewSize(1280, 720);
parameters.setPictureSize(1280, 720);
parameters.setPreviewFormat(ImageFormat.YV12);
m_camera.setParameters(parameters);
m_camera.setPreviewCallback(this);
m_camera.startPreview();
} catch (Exception e) {//防止黑屏
if (m_camera != null){
m_camera.setPreviewCallback(null); // !!这个必须在前,不然退出出错
m_camera.stopPreview();
m_camera.release();
m_camera = null;
}
CameraManager manager = (CameraManager) getSystemService(CAMERA_SERVICE);
manager.unregisterAvailabilityCallback(null);
manager.unregisterTorchCallback(null);
finish();
e.printStackTrace();
}
}
//设置照片颜色特效
//Camera.Parameters.EFFECT_MONO 单色
//Camera.Parameters.EFFECT_MONO 无效果
//Camera.Parameters.EFFECT_WHITEBOARD 白板
//Camera.Parameters.EFFECT_BLACKBOARD 黑板
public void setColorEffect(String value){
if (parameters != null && m_camera != null){
parameters.setColorEffect(value);//设置照片颜色特效
m_camera.setParameters(parameters);//必须重新调用才有效果
}
}
}