android开发之Camera(相机)
来源:互联网 发布:淘宝接单app软件 编辑:程序博客网 时间:2024/05/19 18:37
今天学习了android开发中的相机的开发,总结了关于android中相机的开发流程:
*使用surfaceview进行预览
*需要开启的权限<uses-permission android:name="android.permission.CAMERA"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
1.布局文件:
<SurfaceView android:id="@+id/svPreview" android:layout_width="match_parent" android:layout_height="match_parent" />
2.为surfaceview设置callback
mSfPreview.getHolder().addCallback(new SfCallback());public class SfCallback implements SurfaceHolder.Callback{ /** * 设置相机属性 */void setCamera(){Camera.Parameters parameters = mCamera.getParameters();//得到相机支持的拍照分辨率,按大小排列(有的手机从大到小,有的从小到大)List<Camera.Size> listSize = parameters .getSupportedPictureSizes();// 从大到小排列的情况下,设置照片的大小,只能设置成支持的size,不能随意设置//不同的机型,listSize中的值的顺序不同,需要查看本机在哪个值的时候最清晰parameters.setPictureSize(listSize.get(0).width,listSize.get(0).height);// 设置图片格式parameters.setPictureFormat(ImageFormat.JPEG);//默认情况下相机是横向的,这里只是改变预览的方向 mCamera.setDisplayOrientation(90); //将参数设置到Camera对象中 mCamera.setParameters(parameters);} /** * 创建的时候调用 * @param holder */@Overridepublic void surfaceCreated(SurfaceHolder holder) {mCamera = Camera.open();//打开相机 try { setCamera(); mCamera.setPreviewDisplay(holder); mCamera.startPreview();} catch (IOException e) { e.printStackTrace();} } /** * 状态改变的时候调用 * @param holder * @param format * @param width * @param height */@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {//自动对焦mCamera.autoFocus(null);} /** * 销毁的时候调用 * @param holder */@Overridepublic void surfaceDestroyed(SurfaceHolder holder) { //释放camera if(mCamera != null){ mCamera.release(); mCamera = null; } } }
3.拍照开始
@OnClick(R.id.btBegin)public void capturePhoto(View view) {/*第一个参数按下快门时回调, *第二个参数处理原始的照片数据, *第三个参数处理jpeg格式照片,一般用于存放照片 */mCamera.takePicture(null, null, new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { Bitmap bmSrc = BitmapFactory.decodeByteArray(data, 0,data.length); Bitmap bmRotate = RotateBitmap(bmSrc);//旋转 saveBitmap(bmRotate);//保存 //重新开启预览 mCamera.startPreview(); } });}
3.1.旋转图片
/** * 旋转照片 * * @param bmSrc*/public Bitmap RotateBitmap(Bitmap bmSrc) { Bitmap bmRotate = null; Matrix matrix = new Matrix(); matrix.setRotate(90);//顺时针旋转90度 bmRotate = Bitmap.createBitmap(bmSrc, 0, 0, bmSrc.getWidth(), bmSrc.getHeight(),matrix, true); bmSrc.recycle(); return bmRotate;}
3.2.保存照片
/** * 保存图片 * @param bmToSave */public void saveBitmap(Bitmap bmToSave) { //以时间为文件名 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddhhmmss"); String time = simpleDateFormat.format(new Date()); File file = new File("/sdcard/" + time + ".jpg"); BufferedOutputStream bufferedOutputStream = null; try { bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(file)); bmToSave.compress(Bitmap.CompressFormat.JPEG, 100,bufferedOutputStream);//将图片压缩到流中 bufferedOutputStream.flush();//输出缓冲区的内容到本地 bufferedOutputStream.close();//关闭 } catch (Exception e) { e.printStackTrace(); }}
1 0
- android开发之Camera(相机)
- Android官方开发指南-Camera(相机)
- Android Camera 相机开发详解
- Android多媒体之相机Camera
- android开发——自定义相机(Camera)开发总结
- 安卓开发之手机相机(Camera)应用
- Android Camera搭配SurfaceView开发相机基础
- Android camera相机开发拍照功能
- android之相机开发
- android之相机开发
- Android开发 之 Camera
- Android Camera 相机常见问题
- Android相机Camera
- 自定义相机Camera-android
- Android相机Camera基础
- Android 相机使用 Camera
- android camera相机demo
- android 自定义相机Camera
- C++:继承3(是圆内、圆外还是圆上)
- 从工程中删除Cocoapods
- Android Java四种引用区分 <17>
- 前后端分离,ajax前端跨域访问后端
- 收集的一些比较好的博客
- android开发之Camera(相机)
- 一篇关于字节序的文章
- hdu 3966 树链剖分(坑内存)
- java基础学习
- 数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示
- C#中为何要使用ref参数 (个人理解)
- 如何编写测试报告
- LeetCode Search a 2D Matrix
- oracle第2天之sql