Android Camera使用

原创 2016年06月02日 23:23:36

转载请标明出处:
http://blog.csdn.net/zq2114522/article/details/51542071
本文出自:【梁大盛的博客】

Androd Camera使用

引:摄像头的使用大家应该个个都是行家,但是作为一个开发者的角度出发.摄像头又展现给我们什么呢?

理解Camera旋转的正确姿势

  • 90度来来源

很多开发者第一次接触摄像头的时候应该都是发现一个很严峻的问题-通过surfaceView预览摄像头的成像的时候上下,左右都颠倒了.
具体看看其实就好像摄像头的位置给旋转了90度.

这是神马回事?要理解这一个问题,我们首先从屏幕的角度出发.

  • 屏幕取景
    例如,现在是身处大海边.你所看到到风景一个是这样.是吧,没错吧.这时候掏出手机拍照完全是一件很符合逻辑的事情.

这里写图片描述

这个时候你掏出手机拍一张,应该是这样的姿势.你手机预览框应该看到的是这样.

这里写图片描述

事实上如果你不做特殊的处理应该是这样.
这里写图片描述

  • 摄像头和你想象中的不一样

导致这个问题的根源在于摄像头和你想象中的完全不一样.摄像头是x轴比y轴要大.这是什么意思?细细想想,以前用数码相机拍出来的相片不都是水平的么?所以你可以百度上网摄像头的规格,基本都是1980*1080,1600*1200,1400*10501280*1024等等.(具体自行百度)

这里写图片描述

首先我们手机默认情况下是竖屏(宽小高大),然而摄像头是横屏(宽大高小).这个怎么办?其实也不就是屏幕和摄像头形成90度夹角而已嘛!所以一般处理手段都是把摄像头旋转90度安装在手机背面.所以90度是源于此!(数码相机一般都是横屏所以不存在这个问题.)

这里写图片描述

嘿嘿,好像问题都解决了吧?too yang too simaple!
事实上为什么还会出现上下,左右颠倒呢?这就要说另一样东西了!现在每一个厂家在设计手机的时候都会把摄像头旋转90度安装,但是摄像头君它并不知道啊!并不知道!并不知道!

所以,当摄像头被旋转90度以后效果是这样的!
因为我旋转以后也得把原点放在左上角啊!然后什么情况出现呢?当预览的时候活生生把一个横屏输出的图像展示在一个竖屏的屏幕中,所以才会出现上下,左右颠倒了.

其实这个问题很简单就能处理了.调用setDisplayOrientation函数在预览的时候旋转一个角度.
这就是理解Camera旋转的正确姿势!

识别,拍照

什么是识别?什么是拍照?
对于Android来说,摄像头有很多回调函数.
我们也可以根据需要添加回调函数.对焦成功的时候,有最新一帧预览图片的时候,成功拍照之前的时候,成功拍照并且设备回返未处理的原始数据的时候,成功拍照并且设备返回压缩后的图片的时候……太多太多了!

一般来说关注两个回调函数即可!

  • 有最新一帧预览图片的时候(简称,T1)
  • 成功拍照并且设备返回压缩后的图片的时候(简称,T2)

这两个时间点是很重要,并且大有文章可以做.首先说说第二种情况

T2很明显是设备能删除图像数据的时间点,我们一般只需把数据流持久化即可.应该保存在内存卡的保存在内存卡,应该保存在内在Flash的就保存在Flash.因地制宜.

T1就比较特殊,当我们把摄像头预览打开的以后.摄像头每时每刻都会把图像输出到我们的预览框中(Android 使用SurfaceView实现预览框).事实上我们不可能对没一刻的图像都进行业务的处理.
最常用的办法是调用setPreviewCallback 函数设置一个PreviewCallback回调函数.在设置PreviewCallback回调函数以后,当有一帧最新的预览图片的时候删除的时候调用onPreviewFrame函数.我们在onPreviewFrame可以获取此桢图像进行人脸识别,笑脸检测等等高等数学的事情.注意到这个时间点了么?

在onPreviewFrame处理大量的数据是需要时间的!这处理的这一段时间摄像头还是有数据源源不断的输出到SurfaceView.但是我们都忽略掉.在onPreviewFrame处理完一帧数据以后,改标识出人脸的标识出来.当然在onPreviewFrame处理完高等数学的操作以后,必定会在重新设置setPreviewCallback添加一个PreviewCallback回调函数以便进入下一轮的处理.当计算速度很快的时候这一连串的在流上一点一点的操作就会练成一线!事实上也如此.

所以我们可以理解很多在预览时候进行处理的基本上都是通过setPreviewCallback函数和PreviewCallback完成的.

注意:
setDisplayOrientation 会令预览的图像旋转,但是不会影响onPreviewFrame获取到的图片!

这里写图片描述

附上一个简单的demo(能控制闪光灯,对焦模式,预览图片大小,拍照图片大小.图片保存路径-\手机存储\CapturePicture):
https://github.com/dsliang/CameraDemo

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

AndroidCamera使用

一个快速的方法来拍照或录像就是使用一个意图来调用Android手机上的相机应用程序来拍照或摄像。 使用相机意图需要通过以下步骤: 1. 创建一个意图,请求图像或视频: MediaStore.ACTIO...
  • zhangying1994
  • zhangying1994
  • 2016年05月25日 20:35
  • 678

Android Camera的使用

CameraAndroid Camera 允许你能抓取一张图片或者视频,所有一般使用Camera 类去获取视频源。...
  • zhi184816
  • zhi184816
  • 2016年09月02日 16:53
  • 1096

Android中Camera的开发的简单例子

看了好久官方的文档,研究了好长时间,明明感觉很简单的东西,却一直不成功,最后明白了问题所在,原来是一个很简单的小问题,顿时欲哭无泪。先贴上代码package com.XC.camerastudy;im...
  • xingchenxuanfeng
  • xingchenxuanfeng
  • 2016年03月24日 11:25
  • 1288

Android Camera的使用 (一)

一、前言 在android 5.0 之后 官方已经不推荐Camear这个类了,而是推荐 android.hardware.camera2 包下的api.但我们还是有必要学习一下。Camera这个类可...
  • a992036795
  • a992036795
  • 2016年08月10日 13:39
  • 1006

Android Camera使用指南

要自己写一个相机应用直接使用相机硬件,首先应用需要一个权限设置,在AndroidManifest.xml中加上使用设备相机的权限: 为你的应用创建自定义的相机,一般步骤如下:   ...
  • u010107250
  • u010107250
  • 2015年03月29日 15:44
  • 930

android camera surfacetexture使用

需求:有时候我们预览camera并不想直接输出camera捕获的图像而是想二次加工图像后再预览比如美颜、滤镜等等。这是我们可以用surfacetexture方案解决。 部分代码: surfac...
  • jingzailongxin
  • jingzailongxin
  • 2017年01月22日 14:21
  • 1066

安卓自定义View进阶-Matrix Camera

原文出处:http://www.gcssloop.com/customview/matrix-3d-camera本篇依旧属于Matrix,主要讲解Camera,Android下有很多相机应用,其中的美...
  • axi295309066
  • axi295309066
  • 2016年09月14日 09:45
  • 1443

android camera获取matrix作用于canvas的研究

android matrix camera 纠正别人的错误
  • hnulwt
  • hnulwt
  • 2015年01月16日 11:50
  • 1638

Android7.0 App层实现多Camera同时打开

从Android 6.0开始, 权限在androidmanifest.xml 的配置已经无效了,权限用户需要在运行时请求权限。 Android6.0以前camera权限,需在androidmanife...
  • qq413187589
  • qq413187589
  • 2016年11月11日 10:53
  • 290

CameraSurfaceView——Android Camera使用详解

本篇文章将围绕自定义控件——CameraSurfaceView来阐述Android Camera(非Camera2,因为Camera2只适应5.0+的安卓系统,而目前5.0以下还是大部分,所以当前的主...
  • u012874222
  • u012874222
  • 2017年04月22日 15:39
  • 642
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android Camera使用
举报原因:
原因补充:

(最多只允许输入30个字)