开启自定义摄像头
来源:互联网 发布:java 获取类所在jar包 编辑:程序博客网 时间:2024/05/01 08:14
上一篇讲的是如何调用系统的摄像头并拍照:
Android使用摄像头,分别获取照片的缩略图与原图
这次是开启一个自定义的摄像头,这样可以在摄像界面做一些自定义的操作:
实现功能如下:
单机左图中的“custom camera“ 后出现右图中的视图,实际情况中surfaView中是摄像头的取景,单机capture则拍照
首先设定”custom camera“这个button的onclick事件
public void customCamera(View view){ Intent intent = new Intent(this,CustomCamera.class); startActivity(intent); }
然后写CustomCamera这个类
/** * 我的理解:SurfaceHold.Callback是监听surfaceView状态的一个接口,她有三个方法对应surfaceView的三个状态 */public class CustomCamera extends Activity implements SurfaceHolder.Callback { private SurfaceView mSurface; private SurfaceHolder mHolder; private Camera mCamera; /** * 此处onCreate方法主要是通过surfaceView创建一个surfaceHold,这之后就没有surfaceView什么事了 * */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.custom_camera); mSurface = (SurfaceView) findViewById(R.id.surfaceView); mHolder = mSurface.getHolder(); mHolder.addCallback(this); } /** * get the Camera instance * * @return */ public Camera getCamera() { Camera camera; try { camera = Camera.open(); } catch (Exception e) { camera = null; e.printStackTrace(); } return camera; } public void capture(View view) { //用于设定拍照事件,此处暂时不写 } /** * start to preview the content of camera */ public void setStartPreview(Camera camera,SurfaceHolder surfaceHolder) { try { camera.setPreviewDisplay(surfaceHolder); camera.setDisplayOrientation(90);//set the angle of the camera camera.startPreview(); } catch (IOException e) { e.printStackTrace(); } } /** * like the inputstream ,camera also need to be release */ public void releaseCamera() { if (mCamera != null) { mCamera.setPreviewCallback(null); mCamera.stopPreview(); mCamera.release(); mCamera = null; } } @Override public void surfaceCreated(SurfaceHolder holder) { setStartPreview(mCamera,mHolder); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { mCamera.stopPreview(); setStartPreview(mCamera,mHolder); } @Override public void surfaceDestroyed(SurfaceHolder holder) { releaseCamera(); } /** * 以下两个方法作用:将camera与Activity生命周期关联,合理使用相机资源 */ @Override protected void onResume() { super.onResume(); if (mCamera == null) { mCamera = getCamera(); if (mHolder != null) { setStartPreview(mCamera,mHolder); } } } @Override protected void onPause() { super.onPause(); releaseCamera(); }}
代码结束。
现在理一下写这个类的整体思路:
1、继承callback类,通过surfaceView创建surfaceHolder
2、分别写:
getCamera()—–获取Camera对象
setStartPreview()—–获取相机视图
capture()——获取相机视图后拍照功能,当然此处暂时不写
releaseCamera()—–用于释放相机资源
3、基于步骤2中方法将相机的运作与Activity生命周期关联起来
4、完成 SurfaceHolder.Callback接口的三个方法,目的是将相机是视图的运作与surfaceView的状态对应起来
0 0
- 开启自定义摄像头
- winPhone开启摄像头
- 开启X230摄像头
- DirectShow 开启摄像头
- JMF开启摄像头
- NOKIA 6260 无法开启摄像头
- ubuntu 开启摄像头和samba
- 在ubuntu下开启摄像头
- orangepi开启yuv摄像头驱动
- Android 自定义相机摄像头
- 一段开启摄像头的代码(BCB)
- 发一段开启摄像头的代码
- 发一段开启摄像头的代码
- 电脑摄像头开启之后图形倒立
- OpenCV学习笔记(2)-----开启摄像头
- iOS开发判断是否开启摄像头权限
- opencv 开启摄像头实时采集图像
- opencv同时开启两个摄像头采集图像
- 【Android基础】序列化 Serializable vs Parcelable
- C++之decltype和auto的用法
- 一个新手学习python的过程中遇到的一些问题及解决方法
- Codeforces Beta Round #8A Train and Peter (string的运用)
- iOS_逆向_使用Cycript
- 开启自定义摄像头
- microstation level3 06 define acs by point or face
- VC++2010中的GetWindowText与GetWindowTextW的区别
- git/github
- 学习Discuz! X3.2记录:快速回复插件涉及到哪些数据库表?
- Navicat Premium 将sqlserver 数据库 导入mysql 中
- Visual Studio Express 在C/C++项目中无法为项目添加新建项
- Android产品研发(十七)-->Hybrid开发
- Codeforces Round #359 (Div. 2)D. Kay and Snowflake【树的重心】