效果图

自己写一个软件,简单模仿照相机的功能

主要控件:

用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模仿照相机拍照功能相关推荐

  1. [UE4][Blueprint]虚幻4实现照相机拍照功能

    [UE4][Blueprint]虚幻4实现照相机拍照功能 创建渲染目标,绘制渲染目标,创建动态材质实例,设置实例图片参数为渲染目标,setbrush 注意此函数render material材质是需要 ...

  2. Android camera相机开发拍照功能

    在Android 5.0(SDK 21)中,Google使用Camera2替代了Camera接口.Camera2在接口和架构上做了巨大的变动,但是基于众所周知的原因,我们还必须基于 Android 4 ...

  3. 自定义Camera系列之:SurfaceView + Camera

    一.前言 之前一直想把 Camera 系列的写一下,拖了很久,现在慢慢填坑吧. 首先介绍 SurfaceView + Camera 的组合.虽然从 Android 5.0 后推荐使用 Camera2 ...

  4. 安卓,上传图片不能调取照相机拍照

    我们常见的上传文件或者图片 是使用的input <form><input type="file" name="pic" id="pi ...

  5. android studio操作手机相机,Android Studio 调用Camera实现拍照功能

    首先创建一个SurfaceHolder实现对SurfaceView的回调,然后重写SurfaceCreate函数,实现对Camera的初始化等一系列工作:代码如下: @Override public ...

  6. Android开发技巧——Camera拍照功能

    本篇是我对开发项目的拍照功能过程中,对Camera拍照使用的总结.由于camera2是在api level 21(5.0.1)才引入的,而Camera到6.0仍可使用,所以暂未考虑camera2. 文 ...

  7. Android照相机拍照Camera

    Camera.1.权限设置2.intent.startActivityForResult启动照相3.onActivityResult 接收照相的返回值3.1.数据图片保dsdcard3.2.读取sdc ...

  8. Android添加拍照功能,Android开发实现拍照功能的方法实例解析

    本文实例讲述了Android开发实现拍照功能的方法.分享给大家供大家参考,具体如下: 解析: 1)判断是否有摄像头checkCameraHardware(this) 2)获得相机camera = Ca ...

  9. android程序设计拍照,Android编程实现拍照功能的2种方法分析

    本文实例讲述了Android编程实现拍照功能的2种方法.分享给大家供大家参考,具体如下: Android系统的照相功能,已实现2种方法,可供大家参考: 1. 调用系统摄像头来拍照 首先,找到Andro ...

最新文章

  1. 用TensorFlow实现的Mask R-CNN在人体语义分割上的效果
  2. 伤疤好了有黑印怎么办_搞笑gif动态图片:“发现相亲对象的闺蜜更有实力,我后悔了”哈哈哈好一个见色起意...
  3. 原生js已载入就执行函数_手写CommonJS 中的 require函数
  4. MyBatis与Hibernate比较
  5. 通过Image 对象动态装载图片,不可能立即得到图片的问题
  6. 百度测试新搜索结果页面 改进灵感来自谷歌?
  7. SQL注入学习part01:(结合sqli-libs学习:1-10关)
  8. Python读取文件时出现UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x80 in position xx: 解决方案
  9. Django项目实践2 - Django模板语言(常用语法规则)
  10. 【JZOJ4762】【NOIP2016提高A组模拟9.7】千帆渡
  11. 重装SPS 2003的一点经验
  12. Android 蓝牙终端交互管理
  13. BigGAN进化出最强形态BigBiGAN:重回表示学习,GAN之父点赞
  14. VP9编码:迄今的尝试
  15. 进化树相关概念和类型介绍
  16. springboot接入支付宝支付
  17. ODL框架项目搭建小试牛刀-demo篇
  18. 控制面板中点击管理工具提示administrative tools 位置不可用的解决办法
  19. 划分vlan实验心得体会_计算机网络实验心得体会_计算机网络实验工作感想
  20. 关于谷歌webrtc源码国内镜像的使用问题,以及Kurento媒体服务器

热门文章

  1. 利用css样式表做一个旋转写轮眼
  2. Springboot Mybatis使用pageHelper实现分页查询
  3. 就业要掌握的计算机软件,城市规划专业未来就业应该熟练掌握什么计算机软件..._城乡规划师_帮考网...
  4. 你会用RxJS吗?【初识 RxJS中的Observable和Observer】
  5. chrome打开运行一会就崩了
  6. mysql多表关联left join_Mysql多表表关联查询 inner Join left join right join
  7. mysql 查看_查看MySQL数据库的命令
  8. C/C++ 代码检测工具
  9. 神经网络入门书籍推荐,神经网络相关书籍
  10. springIOC(Inversion of Control)控制反转