关于自定义相机照片横竖屏转换问题的解决
来源:互联网 发布:免费数据统计分析软件 编辑:程序博客网 时间:2024/05/16 14:38
在自定义相机中,横竖屏拍照时,其显示的图片与预览的时候方向不一致,有以下2种方法:
第一种:比较普遍,
/** * 获取图片的旋转角度,有些系统把拍照的图片旋转了,有的没有旋转 */ int degree = readPictureDegree(f.getAbsolutePath()); BitmapFactory.Options opts=new BitmapFactory.Options();//获取缩略图显示到屏幕上 opts.inSampleSize=2; Bitmap cbitmap=BitmapFactory.decodeFile(f.getAbsolutePath(),opts); /** * 把图片旋转为正的方向 */ Bitmap newbitmap = rotaingImageView(degree, cbitmap); iv.setImageBitmap(newbitmap);
当然,在第一种的基础上,如果获取的degree一直为0,但照片角度还不对时,就要用到第二种方法:
//监听屏幕的方向mScreenOrientationEventListener=new OrientationEventListener(this) { @Override public void onOrientationChanged(int orientation) { // TODO Auto-generated method stub // i的范围是0~359 // 屏幕左边在顶部的时候 i = 90; // 屏幕顶部在底部的时候 i = 180; // 屏幕右边在底部的时候 i = 270; // 正常情况默认i = 0; if(45 <= orientation && orientation < 135) { screen = ExifInterface.ORIENTATION_ROTATE_180; } else if(135 <= orientation && orientation < 225) { screen = ExifInterface.ORIENTATION_ROTATE_270; } else if(225 <= orientation && orientation < 315) { screen = ExifInterface.ORIENTATION_NORMAL; } else { screen = ExifInterface.ORIENTATION_ROTATE_90; } } };
holder.addCallback(new SurfaceHolder.Callback() { @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { if (camera != null) { Camera.Parameters parameters = camera.getParameters(); /* 设置相片格式为JPEG */ parameters.setPictureFormat(PixelFormat.JPEG); switch (screen) { case 0: parameters.setRotation(90); break; case 90: parameters.setRotation(0); break; case 180: parameters.setRotation(270); break; case 270: parameters.setRotation(180); break; default: break; } switch (screen) { case 0: camera.setDisplayOrientation(90); break; case 90: camera.setDisplayOrientation(0); break; case 180: camera.setDisplayOrientation(270); break; case 270: camera.setDisplayOrientation(180); break; default: break; } camera.startPreview(); } } @SuppressLint("NewApi") @Override public void surfaceCreated(SurfaceHolder holder) { try { camera = Camera.open(); // 设置camera预览的角度,因为默认图片是倾斜90度的 camera.setDisplayOrientation(90); // 设置holder主要是用于surfaceView的图片的实时预览,以及获取图片等功能 camera.setPreviewDisplay(holder); } catch (Exception e) { if (camera != null) { camera.release(); camera = null; } e.printStackTrace(); } } @Override public void surfaceDestroyed(SurfaceHolder holder) { if (camera != null) { camera.stopPreview(); camera.release(); camera = null; } } });
通过以上方法,自定义相机图片旋转类似的问题基本都可以解决
有问题欢迎交流 QQ 2240405944
0 0
- 关于自定义相机照片横竖屏转换问题的解决
- 关于自定义相机预览问题的解决
- Android开发教程--关于系统相机拍照获取的照片尺寸较小问题的解决
- android解决相机拍照照片被旋转的问题
- 关于android自定义的相机问题
- 自定义相机照片截取
- android 禁止横竖屏转换的问题
- Android横竖屏要解决的问题
- 关于swift中自定义相机拍照后,截取照片代码
- 关于Android 横竖屏切换的问题
- 关于iOS横竖屏幕强制转换的问题[强制横屏]
- 关于横竖屏切换后Fragment发生重叠问题的解决
- 关于调用Android相机拍摄照片返回数据过小的问题
- iOS横竖屏转换问题
- 相机开发(聚焦、横竖屏拍照、照片存储、连续拍照等)
- 相机开发(聚焦、横竖屏拍照、照片存储、连续拍照等)
- 相机开发(聚焦、横竖屏拍照、照片存储、连续拍照等)
- 相机开发(聚焦、横竖屏拍照、照片存储、连续拍照等)
- CPU中的缓存和操作系统中的缓存分别是什么 ?
- Oracle数据远程连接的四种设置方法和注意事项
- 多线性主成分分析(MPCA)简介
- Oracle数据库、实例、用户、表空间、表之间的关系
- poj 3369 Grocery store 枚举
- 关于自定义相机照片横竖屏转换问题的解决
- Java用ScriptEngine解析脚本
- Android高效加载大图、多图解决方案,有效避免程序OOM
- 关于java.io.IOException: open failed: EACCES (Permission denied)问题的解决
- struts2拦截器 简单了解
- Linux内核工程导论——用户空间进程使用内核资源
- 汇编helloworld程序
- tomcat warn:The APR based apache tomcat native library failed to load
- HTTP协议及请求/响应模型