使用SurfaceView+Camera模仿照相机拍照功能
效果图
自己写一个软件,简单模仿照相机的功能
主要控件:
用SurfaseView来控制视图
使用Camera来操控照相机
页面很简单
用的是RelativeLayout相对布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"><SurfaceViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/sv_camera_surface"/><Buttonandroid:layout_width="50dp"android:layout_height="50dp"android:background="@drawable/camera"android:onClick="takePhoto"android:layout_alignParentRight="true"android:layout_centerVertical="true"/></RelativeLayout>
后台代码
public class CameraActivity extends AppCompatActivity {private SurfaceView sv_camera_surface;private Camera camera;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_camera);//获取SurfaceView控件sv_camera_surface = (SurfaceView) findViewById(R.id.sv_camera_surface);//建立回调函数sv_camera_surface.getHolder().addCallback(new SurfaceHolder.Callback() {@Overridepublic void surfaceCreated(SurfaceHolder surfaceHolder) {//打开照相机camera = Camera.open();//设置摄像参数Camera.Parameters parameters= camera.getParameters();//设置格式parameters.setPictureFormat(PixelFormat.JPEG);//设置质量parameters.set("jpeg-quality",100);//将参数赋给cameracamera.setParameters(parameters);//开启预览效果camera.startPreview();try {//进行展示camera.setPreviewDisplay(sv_camera_surface.getHolder());} catch (IOException e) {e.printStackTrace();}}@Overridepublic void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {}@Overridepublic void surfaceDestroyed(SurfaceHolder surfaceHolder) {//当拍完则停止画面并释放camera.stopPreview();camera.release();}});}//拍照的方法public void takePhoto(View view){//拍照,第三个参为回调函数camera.takePicture(null, null, new Camera.PictureCallback() {@Overridepublic void onPictureTaken(byte[] bytes, Camera camera) {//bytes就是传过来的图片,将bytes格式的图片转码为bitmapBitmap bitmap=BitmapFactory.decodeByteArray(bytes,0,bytes.length);try {//设置时间Calendar calendar=Calendar.getInstance();int year=calendar.get(Calendar.YEAR);int month=calendar.get(Calendar.MONTH);int day=calendar.get(Calendar.DAY_OF_MONTH);int second=calendar.get(Calendar.SECOND);//输出到手机的相册里面,FileOutputStream fos=new FileOutputStream("/mnt/sdcard/dcim/camera/"+year+(month+1)+day+second+".jpg");//设置格式bitmap.compress(Bitmap.CompressFormat.JPEG,85,fos);camera.stopPreview();camera.startPreview();} catch (FileNotFoundException e) {e.printStackTrace();}}});}}
配置信息
获得三样权限
<!--写存储--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!--获得相机--><uses-permission android:name="android.permission.CAMERA"></uses-permission><!--删除或增加文件--><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
用到的素材
使用SurfaceView+Camera模仿照相机拍照功能相关推荐
- [UE4][Blueprint]虚幻4实现照相机拍照功能
[UE4][Blueprint]虚幻4实现照相机拍照功能 创建渲染目标,绘制渲染目标,创建动态材质实例,设置实例图片参数为渲染目标,setbrush 注意此函数render material材质是需要 ...
- Android camera相机开发拍照功能
在Android 5.0(SDK 21)中,Google使用Camera2替代了Camera接口.Camera2在接口和架构上做了巨大的变动,但是基于众所周知的原因,我们还必须基于 Android 4 ...
- 自定义Camera系列之:SurfaceView + Camera
一.前言 之前一直想把 Camera 系列的写一下,拖了很久,现在慢慢填坑吧. 首先介绍 SurfaceView + Camera 的组合.虽然从 Android 5.0 后推荐使用 Camera2 ...
- 安卓,上传图片不能调取照相机拍照
我们常见的上传文件或者图片 是使用的input <form><input type="file" name="pic" id="pi ...
- android studio操作手机相机,Android Studio 调用Camera实现拍照功能
首先创建一个SurfaceHolder实现对SurfaceView的回调,然后重写SurfaceCreate函数,实现对Camera的初始化等一系列工作:代码如下: @Override public ...
- Android开发技巧——Camera拍照功能
本篇是我对开发项目的拍照功能过程中,对Camera拍照使用的总结.由于camera2是在api level 21(5.0.1)才引入的,而Camera到6.0仍可使用,所以暂未考虑camera2. 文 ...
- Android照相机拍照Camera
Camera.1.权限设置2.intent.startActivityForResult启动照相3.onActivityResult 接收照相的返回值3.1.数据图片保dsdcard3.2.读取sdc ...
- Android添加拍照功能,Android开发实现拍照功能的方法实例解析
本文实例讲述了Android开发实现拍照功能的方法.分享给大家供大家参考,具体如下: 解析: 1)判断是否有摄像头checkCameraHardware(this) 2)获得相机camera = Ca ...
- android程序设计拍照,Android编程实现拍照功能的2种方法分析
本文实例讲述了Android编程实现拍照功能的2种方法.分享给大家供大家参考,具体如下: Android系统的照相功能,已实现2种方法,可供大家参考: 1. 调用系统摄像头来拍照 首先,找到Andro ...
最新文章
- 用TensorFlow实现的Mask R-CNN在人体语义分割上的效果
- 伤疤好了有黑印怎么办_搞笑gif动态图片:“发现相亲对象的闺蜜更有实力,我后悔了”哈哈哈好一个见色起意...
- 原生js已载入就执行函数_手写CommonJS 中的 require函数
- MyBatis与Hibernate比较
- 通过Image 对象动态装载图片,不可能立即得到图片的问题
- 百度测试新搜索结果页面 改进灵感来自谷歌?
- SQL注入学习part01:(结合sqli-libs学习:1-10关)
- Python读取文件时出现UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x80 in position xx: 解决方案
- Django项目实践2 - Django模板语言(常用语法规则)
- 【JZOJ4762】【NOIP2016提高A组模拟9.7】千帆渡
- 重装SPS 2003的一点经验
- Android 蓝牙终端交互管理
- BigGAN进化出最强形态BigBiGAN:重回表示学习,GAN之父点赞
- VP9编码:迄今的尝试
- 进化树相关概念和类型介绍
- springboot接入支付宝支付
- ODL框架项目搭建小试牛刀-demo篇
- 控制面板中点击管理工具提示administrative tools 位置不可用的解决办法
- 划分vlan实验心得体会_计算机网络实验心得体会_计算机网络实验工作感想
- 关于谷歌webrtc源码国内镜像的使用问题,以及Kurento媒体服务器
热门文章
- 利用css样式表做一个旋转写轮眼
- Springboot Mybatis使用pageHelper实现分页查询
- 就业要掌握的计算机软件,城市规划专业未来就业应该熟练掌握什么计算机软件..._城乡规划师_帮考网...
- 你会用RxJS吗?【初识 RxJS中的Observable和Observer】
- chrome打开运行一会就崩了
- mysql多表关联left join_Mysql多表表关联查询 inner Join left join right join
- mysql 查看_查看MySQL数据库的命令
- C/C++ 代码检测工具
- 神经网络入门书籍推荐,神经网络相关书籍
- springIOC(Inversion of Control)控制反转