Media and Camera 中 Camera 模块
2015-10-29 22:58
295 查看
( 附有案例代码)
Camera
使用前先明确清单,例如<uses-permissionandroid:name="android.permission.CAMERA"/>
和<uses-featureandroid:name="android.hardware.camera"/>和<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>和<uses-featureandroid:name="android.hardware.camera"android:required="false"/>等权限,具体见API
1、要调用系统内的相机实现拍照功能,使用Intent,利用putExtra()传值,并重现一下onActivityResult()回调方法即可
2、如果想要自己做相机,就得先检测手里里是否有相机
并且获得Camera实例,
然后在创建一个视图类继承SurfaceView实现SurfaceHolder接口,重写一下构造方法,并在surfaceCreated();surfaceChanged();surfaceDestroyed()三个方法中重写自己想要做的事(注意可能由于安卓版本的不同,有些方法的取舍不一致,在安卓3.0后就不必注意了),往往会在第一个方法中传入SetPreviewDisplay(holder)然后在startPreview()方法。再者新建一个线性布局,利用帧布局来输出画面,当然按钮是必不可少的。接下来就要实现点击事件,在其中写入Camera.takePictrre()方法,在其中实现PictureCalllback接口,再将数组数据写到文件当中并保存呢,
最后在onDestory()中利用relase()方法释放相机资源,置为null。
到此为止,一个自己的相机就完成了,(一定要注意添加权限,否则运行不了,在activity里可以设置预览 方向android:screenOrientation="landscape")。
Videos
注意写摄像机时一定要先解锁再给摄像头上锁
1、 同样,调用系统相机使用Intent调用,重写onActivityResult()方法即可。
2、首先调用open()方法得到相机实例,然后在Activity内部写一个内部类(实现SurfaceHolder.callback接口)创建一个视图预览类或者重写一个Activity 类 也
来设置预览视图。布局文件利用SurfaceView控件显示视图。然后在添加的Button中添加点击事件,先解锁摄像机camera.unClock(),并设置MediaRecorder的各种参数,例如分辨率setProfile()等参数,然后利用setPreviewDisplay(surface)方法开启预览,在prepare(),最后start()就成功开启了一个摄像机。最后用完后必须给摄像机上锁Camera.clock(),并且释放资源relase(),置为空即可。
其实写一个自己的相机和摄像机代码都类似,都要写一个预览视图类继承SurfaceView类实现SurfaceHolder.callback接口,建议写Camera或者Video之前了解一下SurfaceView SurfaceHolder
和 SurfaceView ,对此很有帮助。。本文仅是作者看完官方API后的简谈,如有误,望读者指出,谢谢合作。
Camera
使用前先明确清单,例如<uses-permissionandroid:name="android.permission.CAMERA"/>
和<uses-featureandroid:name="android.hardware.camera"/>和<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>和<uses-featureandroid:name="android.hardware.camera"android:required="false"/>等权限,具体见API
1、要调用系统内的相机实现拍照功能,使用Intent,利用putExtra()传值,并重现一下onActivityResult()回调方法即可
2、如果想要自己做相机,就得先检测手里里是否有相机
private boolean checkCameraHardware(Context context) { if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){ // this device has a camera return true; } else { // no camera on this device return false; } }
并且获得Camera实例,
public static Camera getCameraInstance(){ Camera c = null; try { c = Camera.open(); // open()里面如果不传值或者为0就是默认后置摄像头,若为1,那就可能是前置摄像头
//在方法中可以设置Camera的参数,例如相片大小之类的,利用flatten()方法可以获得手机里的全部参数
} catch (Exception e){ // Camera is not available (in use or does not exist) } return c; // returns null if camera is unavailable }
然后在创建一个视图类继承SurfaceView实现SurfaceHolder接口,重写一下构造方法,并在surfaceCreated();surfaceChanged();surfaceDestroyed()三个方法中重写自己想要做的事(注意可能由于安卓版本的不同,有些方法的取舍不一致,在安卓3.0后就不必注意了),往往会在第一个方法中传入SetPreviewDisplay(holder)然后在startPreview()方法。再者新建一个线性布局,利用帧布局来输出画面,当然按钮是必不可少的。接下来就要实现点击事件,在其中写入Camera.takePictrre()方法,在其中实现PictureCalllback接口,再将数组数据写到文件当中并保存呢,
File pictureFile = new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".jpg"); //文件存在SD卡的根目录 // 下,名字以当前时间.jpg格式命名
try { FileOutputStream fos = new FileOutputStream(pictureFile); fos.write(data); fos.close(); } catch (FileNotFoundException e) { Log.d(TAG, "File not found: " + e.getMessage()); } catch (IOException e) { Log.d(TAG, "Error accessing file: " + e.getMessage()); }
最后在onDestory()中利用relase()方法释放相机资源,置为null。
到此为止,一个自己的相机就完成了,(一定要注意添加权限,否则运行不了,在activity里可以设置预览 方向android:screenOrientation="landscape")。
Videos
注意写摄像机时一定要先解锁再给摄像头上锁
1、 同样,调用系统相机使用Intent调用,重写onActivityResult()方法即可。
2、首先调用open()方法得到相机实例,然后在Activity内部写一个内部类(实现SurfaceHolder.callback接口)创建一个视图预览类或者重写一个Activity 类 也
来设置预览视图。布局文件利用SurfaceView控件显示视图。然后在添加的Button中添加点击事件,先解锁摄像机camera.unClock(),并设置MediaRecorder的各种参数,例如分辨率setProfile()等参数,然后利用setPreviewDisplay(surface)方法开启预览,在prepare(),最后start()就成功开启了一个摄像机。最后用完后必须给摄像机上锁Camera.clock(),并且释放资源relase(),置为空即可。
其实写一个自己的相机和摄像机代码都类似,都要写一个预览视图类继承SurfaceView类实现SurfaceHolder.callback接口,建议写Camera或者Video之前了解一下SurfaceView SurfaceHolder
和 SurfaceView ,对此很有帮助。。本文仅是作者看完官方API后的简谈,如有误,望读者指出,谢谢合作。
相关文章推荐
- 覆写equals方法必须覆写hashCode方法
- java基础知识总结(二)
- LeetCode OJ:Remove Duplicates from Sorted Array II(移除数组中的重复元素II)
- 宏定义
- 【ASC44E】【构造】Embedding Caterpillars 毛毛虫图向完全图的映射
- centos 6.x x86 源码安装git-2.3.0
- 程序员面试:电话面试问答Top 50
- 位域/字节对齐
- 创建销毁对象之遇到多个构造器参数时考虑用构建器(笔记)
- 我的第一个html
- 关于二叉堆(优先队列)的其他操作及其应用
- #ifdef endef的用法
- Scala学习笔记-环境搭建以及简单语法
- TreeSet类对象的比较
- 防sql注入解决方法
- python3 入门 (四) 类与继承
- [Django数据库模型]Django连接MySQL数据库的简单例子
- 流媒体加密(1)
- 项目冲刺-第二天
- 第七次作业——团队作业——项目冲刺———第二天