android自定义相机、连续(自动)聚焦、点击(触摸)聚焦、变焦、拍照后自定义裁剪、旋转
来源:互联网 发布:学中医的软件 编辑:程序博客网 时间:2024/04/30 11:06
最近做了一个图片识别、以及搜索的小项目,其中有一个模块是拍照以及拍照后对图片进行剪切,开始用的系统的相机和裁剪,由于系统的相机和裁剪多出了一些不必要的步骤和启动慢等等带给用户的体验不好,故自己写了一个,下面给大家简要介绍下:
自定义相机:定义SurfaceView得到SurfaceHolder,然后添加回调
<span style="white-space:pre"></span>surface_camera = (SurfaceView) findViewById(R.id.camera_preview);view_focus = findViewById(R.id.view_focus);surface_holder = surface_camera.getHolder();surface_holder.addCallback(this);在回调中将SurfaceView和camera关联在一起,然后进行初始化、连续对焦然后销毁,这里简单把代码粘一下
@Overridepublic void surfaceCreated(SurfaceHolder holder) {if(camera != null){try {camera.setPreviewDisplay(surface_holder);} catch (IOException e) {System.out.println(e);}}mode = MODE.FOCUSING;updateCameraParameters();camera.startPreview();}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {camera.autoFocus(new AutoFocusCallback() {@Overridepublic void onAutoFocus(boolean arg0, Camera arg1) {// TODO Auto-generated method stubif (arg0) {updateCameraParameters();// 实现相机的参数初始化}}});}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {if (camera != null && holder != null) {camera.stopPreview();camera.release();camera = null;}}在实现连续对焦的方式我是采用的传感器实现的,通过手机位置或者说角度发生微弱变化然后调用对焦功能,这样子和实际的系统自带的相机的体验差不多
@Overridepublic void onSensorChanged(SensorEvent arg0) {// TODO Auto-generated method stubfloat x = arg0.values[0]; float y = arg0.values[1]; float z = arg0.values[2]; if (!mInitialized){ mLastX = x; mLastY = y; mLastZ = z; mInitialized = true; } float deltaX = Math.abs(mLastX - x); float deltaY = Math.abs(mLastY - y); float deltaZ = Math.abs(mLastZ - z); if(deltaX > .3 || deltaY > .3 || deltaZ > .3){ if(CustomCameraView.camera != null){ cameraView.setFocus(); } } mLastX = x; mLastY = y; mLastZ = z;}变焦的话,就不多说了就是简单的silder实现的,“点击对焦”简单调用自动对焦实现的,这里也存在了一个问题就是打开相机之后,如果进行了点击对焦之后就不能进行连续对焦了,这里我只用到了连续对焦没有使用点击对焦,所以就没有深入探究原因。
拍照后保存
<span style="white-space:pre"></span>/** * 拍照 */public void takePicture() {if (camera != null) {camera.takePicture(null, null, new PictureCallback() {@Overridepublic void onPictureTaken(byte[] data, Camera camera) {File folder = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+ CUSTOMECAMERA_PHOTO_PATH);if (folder.exists() == false) {folder.mkdirs();}File pictureFile = new File(folder.getAbsoluteFile(),"temp.jpg");try {FileOutputStream fos = new FileOutputStream(pictureFile);fos.write(data);fos.close();if (onTakePictureInfo != null) {onTakePictureInfo.onTakePictureInofo(true);}} catch (Exception e) {if (onTakePictureInfo != null) {mode = MODE.NONE;onTakePictureInfo.onTakePictureInofo(false);}}}});mode = MODE.NONE;}}
关于剪切拿到了的源码,在上面进行了简要的修改,我这里需要的是横屏,最后的结果:
拍照界面
裁剪界面
下载地址:http://download.csdn.net/detail/u012350993/8285313,里面一些东西我没有去除,文件有点略大。
0 0
- android自定义相机、连续(自动)聚焦、点击(触摸)聚焦、变焦、拍照后自定义裁剪、旋转
- Android自定义相机定点聚焦
- 自定义相机 触摸聚焦,添加可控层
- Android 自定义相机开发(支持前置,后置摄像头,可以自动聚焦,保存和显示图片)
- 相机开发(聚焦、横竖屏拍照、照片存储、连续拍照等)
- 相机开发(聚焦、横竖屏拍照、照片存储、连续拍照等)
- 相机开发(聚焦、横竖屏拍照、照片存储、连续拍照等)
- 相机开发(聚焦、横竖屏拍照、照片存储、连续拍照等)
- 相机开发(聚焦、横竖屏拍照、照片存储、连续拍照等)
- Android 自定义相机 切换相机 参考线(辅助线) 闪光灯 缩放 自动聚焦 Demo
- 自定义Camera,闪光灯,相机切换,相机聚焦
- vue 自定义指令 自动聚焦
- Android自定义照相机,手动聚焦
- 【Android】自定义相机的实现(支持连续拍照、前后摄像头切换、连续对焦)
- 自定义相机旋转拍照角度
- Android自定义相机拍照、图片裁剪的实现
- Android 自定义前置相机(三星手机拍照时照片旋转90度问题)
- android自定义相机拍照
- [leetcode]N-Queens
- 不引入第三变量,交换两个数的值
- Linux命令(一)
- 多线程操作数据库 (CoreData)
- 一些软件设计的原则
- android自定义相机、连续(自动)聚焦、点击(触摸)聚焦、变焦、拍照后自定义裁剪、旋转
- 我(和谐)草(和谐)尼(和谐)玛
- 登录和注册(jsp+servlet+JavaBean)
- Android5.0之Palette简单实用
- 使用Genymotion调试出现错误INSTALL_FAILED_CPU_ABI_INCOMPATIBLE解决办法
- OC 时间NSDate (NSDate<——> NSString)
- 输出十个数中的最大值
- Jsp+Servlet+JavaBean简单mvc实例
- java随笔