android摄像头,Android摄像头图像处理
微核Android摄像头出问题
刷新或者打开权限。
创新互联是一家专注于成都网站设计、成都网站建设与策划设计,市中网站建设哪家好?创新互联做网站,专注于网站建设十多年,网设计领域的专业建站公司;建站业务涵盖:市中等地区。市中做网站价格咨询:13518219792
如果是软件调试的时候出现这种问题,那么需要在抛异常的时候刷新,不抛异常,这样的话再次调用的时候还是需要让用户去允许一次,原因是因为最开始的时候还没读取到摄像机权限所以会抛异常,而且当有权限的时候是不会出现这个错误的,如果是硬件的问题的话那就没办法了,不过大多数情况是rom被商家修改导致的,自己下载的软件的话基本上只需要开启相机权限就没问题了。
在Android系统中,操作Camera摄像头非常容易出问题,特别是Camera.open()的时候。就算open正常,也可能会出现预览界面黑屏的情况。
出现黑屏的时候,如果没有明显的报错,很大概率是预览视图配置不当的原因。要检查预览视图,TextureView或者SurfaceView有没有设置View.GONE或者View.INVISIBLE。另外还要注意Camera的日志,有时候就算日志级别是(D,debug)都有可能发现一些蛛丝马迹~~~
Android手机拍摄小技巧
很多人觉得Android手机的拍照功能不如苹果,但事实上,许多Android手机配备了高质量摄像头,只要掌握正确方法,用手机拍出完美的照片也是很简单的,下面就带来Android手机拍摄实用小技巧,一起来看看吧。
了解摄像头设置
在开始拍摄之前,先要熟悉手机和摄像头的设置,之后再拍摄就会得心应手了。如果我们能够了解不同的模式和设置,就可以深入探索和实验,让拍摄更具创造力。
确保镜头干净
看起来这一点很奇怪,在使用单反相机时,我们可能会记得擦拭单反镜头,但是很难记得要擦拭手机镜头。Android手机摄像头没有防尘防刮保护罩,专业相机有。
随身携带一小块清洁布,或者在钱包、夹克内缝一小块超细纤维镜头清洁布,时时提醒自己擦拭手机镜头和屏幕,如此一来就可以确保手机拍摄出最清晰的照片。如果嫌麻烦,可以直接用汗衫擦拭。不要忘了擦拭前置摄像头。
忘了闪光灯 用外部光源
如果外部环境黑暗,我们会下意识打开闪光灯拍摄照片,但是获得的图片质量总是不尽人意。事实上,我们完全可以不使用闪光灯,几乎从不使用。在拍摄照片时,我们可以寻找自然光源。如果你在餐馆内,想拍摄一张菜肴的照片,可以选择靠窗户的座位,如此一来就可以获得完美的光线,拍出菜肴的细节。
如果你想自拍,可以站在大窗户前拍摄。这样拍摄并不会让你的脸和特征“亮”起来,但是会让背景变暗,让你本人处在注意力的正中央。如果没有自然光,要拍摄照片是不可能的,因此在拍摄时最好找一个外部光源,比如一盏灯或者一支蜡烛。虽然看起来很愚蠢,但是几乎所有的其它光线都要比闪光灯好,有了更好的光线,就可以控制拍摄的内容,让我们想要的`部分亮起来。
不要变焦
和Android手机的闪光灯一样,我们应该避开变焦功能。变焦会降低图像的质量,当我们编辑照片时可能会发现一些惊艳的东西,之前没有发现,我们可以将这些漂亮的部分剪出来。
这一点我们很难记住,Android设备和单反相机是不一样的。用手机拍摄时如果我们使用了变焦功能,图像的质量很难保持一致。
如果你真的想亲近自己拍摄的对象,请站起来,走近它,不要使用变焦功能。用这种方法拍摄,可以很好控制拍摄的对象,如果用变焦功能就会降低照片的整体质量。
爆发性拍摄然后挑选
在拍摄照片时,爆发性拍摄的确是一种懒惰的拍摄方式,但是它极可能是拍摄完美照片的最有效方式。
不管是自拍、拍风景、或者是拍摄菜肴,使用爆发性拍摄方式可以毫无压力拍出一大堆照片,我们只需要按下快门,就可以用快速镜头拍出很多照片,拍完之后再选择哪些最完美的。
虽然拍摄的照片有许多很糟糕,完全无法使用,但是当中还是有隐藏了少数“宝石”。花点时间细细查看拍摄的照片,挑出最好的,删除糟糕的。
找一个自己喜欢的照片编辑软件
拍完照片之后,你可以选择自己喜欢的APP编辑软件编辑照片。现在市场上有许多的软件可供选择,每一款软件都有自己独特的功能,比如过滤器、调整亮度和对比度、甚至还可以增加文本信息和贴纸。
如果你对自己拍摄的照片信心不足,照片编辑软件也是一个很棒的补充工具。如果你对某些照片的质量有点担心,用编辑软件稍稍编辑可以“拯救”这些照片。
在社交媒体上关注你喜欢的摄影师
有时,用Android手机拍摄最好的照片并不是从相机APP开始的,而是从浏览社交媒体开始的,我们在社交媒体上看到摄影师用Android手机拍摄漂亮的照片,从中可以学到经验。
在社区媒体上关注一些摄影师,向他们取经,可以获得一些很好的经验,因此我们完全可以先看看别人拍摄的好照片,然后走出去尝试一下。你可以发表评论,问问他,看他是如何用特定风格拍摄特定对象的,或者问问他们是如何编辑特定照片、使之呈现特定风格的,拍摄者可能会回复。
你可以前往Instagram页面探索一下,欣赏欣赏其它Android手机摄影师拍摄的照片。最开始时你可以挑选喜欢的风格模仿拍摄,最终将它变成自己的。
Android 系统原生相机API角度原理与适配
虽然Camera作为第一代原生android所提供的相机类一直被开发者甚至Google官方开发人员所诟病,但为了兼容和适配Android版本5.0以下的App应用,我们别无选择。因此,有了本篇文档详细阐述1.0版的Camera 是如何使用的。本篇使用的是SurfaceView与Camera类。
文档下文会在拍照流程中的不同的阶段应用到上述四个角度,而“终端自然方向”贯穿整个流程当中。这一个方向、四个角度非常重要,缺一不可,是支撑相机Camera 系列API的关键。在设计NXDesign的相机项目中,经过对官方文档的研读和各路资料的调研之后发现,我们在网络上查到的博客类相关资料有80%的实现方式是存在问题的,当然,这也可以归咎于该API其本身确实不好用,如果不对源码注释进行仔细研究,很容易对开发者产生误导。
更加准确的说,相机的生命周期是依托于SurfaceView的创建和销毁来完成的。SurfaceView的作用是提供相机内容的实时预览。我们需要在surfaceview创建好之后打开相机使用相机资源,在surfaceview被销毁后释放相机资源。
surfaceview 提供了holder机制向调用方通知surfaceview的变化时机,为了在不同的时机对相机资源做不同的事情,需要调用SurfaceHolder.addCallback()方法。
现在的Android手机一般会有多个摄像头,但根据其方向可以归为两类: CAMERA_FACING_BACK 和 CAMERA_FACING_FRONT 。在打开摄像头之前,首先需要获取相机资源,判断相机个数 Camera.getNumberOfCameras() 。每个相机对应一个CameraInfo,它的定义如下:
这里涉及到一个重要概念:相机图像传感器(camera sensor),想要理解上述注释的含义,就需要先理解下图内容。
左图是通常情况下,我们对view的x y方向的认知,以屏幕的左上角为原点向右为x正方向,向下为y正方向;但是,右图描述的是绝大多数情况下, 相机图像传感器 的起始位置和方向判定。与view不同的是,传感器以手机屏幕在自然方向上的右上角为原点,向下为x正方向,向左为y正方向。因此,我们理解上述注释就不难了。如果相机自带的传感器顶部与终端自然方向(手机屏幕的硬件方向,一般手机都是竖直方向,也就是文档中说的naturally tall screen)的右边缘一致,则这个值就是90度。如果前置摄像头传感器的顶部与手机自然方向一致,则这个值就是270度。
当我们定义startCamera()方法时,要做5件事情,1.遍历摄像头cameraId,找到想要打开的摄像头(前置还是后置);2.获取摄像头信息,主要获取orientation;3. 设置相机DisplayOrientation 4.设置相机参数,主要是宽高比、对焦模式、图片格式、setRotation等。5. 向camera设置surfaceview.viewholder,并且startPreview。主要逻辑如下:
拿到cameraInfo.orientation之后,要调用camera.setDisplayOrientation设置进去,保证通过surfaceview预览到的取景跟当前的手机方向保持一致,但是,setDisplayOrientation设置的其实是经过两个角度计算之后的复合角度,而并不单纯是cameraInfo.orientation。正确的做法是这样的:先获取手机屏幕的旋转方向,然后与cameraInfo.orientation加和得到最终角度。通常情况下,如果我们设置相机为portrait,则不用考虑rotation。这也是为什么绝大部分网络资料中都会粗暴的写入一个90度完事儿而并没有解释这么做的道理。
调用camera.takePicture(null, null, pictureCallback)
这里需要做的仅仅是将callback中返回的data存储为File。需要注意的是,data中会包含setRotation()方法中的角度信息,因此如果直接使用Bitmap工具类生成bitmap,再进行存储或者展示,生成出来的图像其实是缺失了旋转角度的原始方向,这十有八九会发生图像展示角度错误的情况。因此,需要直接保存,再通过Exif工具类读取File中的角度信息(当然Exif工具类就是为了读取File中的各种信息而生的,比如拍照时间、经纬度等等)。
基于Camera API,
surfaceview的预览需要setDisplayOrientation(),入参角度与CameraInfo.orientation(传感器偏角)和WindowManager.default.displayOrientation(屏幕旋转角度)两个角度有关。
相机拍照前需要setRotation(),入参角度与CameraInfo.orientation(传感器偏角)和OrientationEventListener返回的orientation(终端自然角度偏角)有关,二者的换算结果就是图像写入偏角,该偏角意味着图像被顺时针旋转该角度就能够回正展示。
当前文章:android摄像头,Android摄像头图像处理
链接URL:http://myzitong.com/article/dsddhss.html