Camera点点滴滴

相信现在很多的应用都离不开照相机的使用,关于照相机我只是把自己做过的项目中遇到的问题整理一下,如果调用系统的相机我就不说了比较简单,

主要是说说自定义相机中遇到的问题,其实建议大家去看看源码,这样你可以更好的理解Camera,关于大概流程可以去网上搜去很多,在这

主要说说几个比较重要的点吧

第一点:预览图像的显示窗口 也就是SurfaceView了 

If you want to set a specific size for your camera preview, set this in the surfaceChanged() method as noted in the comments above. When setting preview size, you must use values from getSupportedPreviewSizes()Do notset arbitrary values in the setPreviewSize() method

这一段比较关键,就是设置预览框的大小,大家都知道,android是半开源的,鉴于某些厂商把原有程序改的不成样子还有就是android的手机各种大小所以 如果你需要设定预览框的大小不要自己随便定义,很可能引起你的程序的崩溃,有的人可能这么想那么我就去设定为屏幕的宽高,几乎所有的手机都会支持,但是你可以发现,如果这样设定,你的预览的图像,并不是你想要的,可能被拉伸,最好设定一下预览的参数,可以用getSupportedPreviewSizes()方法去获取你的手机支持的设置值他返回的是一个list<Camera.Size>集合从中取,你想要的值这样就可以避免图片的拉伸和崩溃问题

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)

此方法返回的是一个共享资源的位置,google建议在此下面构建一个子文件夹用于保存自己的图像,当你的程序被用户卸载该文件还会保留

Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES) 

此方法和上边的一样,返回一个标准位置不同的是如果将图片保存在该位置上,当用户卸载你的程序的时候,在该文件上的所有文件也将被卸载。

getExternalStoragePublicDirectory() 这个方法是在sdk2.2以及以上使用的  低版本的话用 Environment.getExternalStorageDirectory()去代替不过现在应该不用去过多考虑了 相信2.2一下的版本已经很少了。

还有就是图片和预览窗口图片旋转的问题了,预览图像的旋转可以使用setDisplayOrientation();而所照图片的旋转可以使用 setRotation 基本可以搞定的,还有一种需求就是要求不管是竖拍还是横拍,拍出来的图片都要是正的,你的相机类已经设定为保持竖屏,那么再用getResouration.getConfiguration.orientation,获取的会永远是竖屏,既然系统相机可以定位横竖屏那么,肯定也不只是用这种简单的方法了,寻寻觅觅终于找到神器,OrientationEventListener看到这个大家应该都明吧,有监听横竖平的接口而且不会受到你强制设置竖屏的影响 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值