关于自定义相机照片横竖屏转换问题的解决
2015-11-06 16:21
316 查看
在自定义相机中,横竖屏拍照时,其显示的图片与预览的时候方向不一致,有以下2种方法:
第一种:比较普遍,
当然,在第一种的基础上,如果获取的degree一直为0,但照片角度还不对时,就要用到第二种方法:
通过以上方法,自定义相机图片旋转类似的问题基本都可以解决
有问题欢迎交流 QQ 2240405944
第一种:比较普遍,
/** * 获取图片的旋转角度,有些系统把拍照的图片旋转了,有的没有旋转 */ 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
相关文章推荐
- Nginx缩略图和Fastdfs整合以及image_filter配置,7点经验结论和5个参考资料
- Nginx缩略图和Fastdfs整合以及image_filter配置,7点经验结论和5个参考资料
- 1029. Median (25)
- Android插件—Android Drawable Importer
- [Android基础]Intent
- java项目分层思想
- 图像识别中的深度学习【香港中文大学王晓刚】
- 多线性主成分分析(MPCA)简介
- 如何查看电脑的配置-卖电脑必备(尤其二手)
- hibernate的Transaction接口理解
- Oracle数据远程连接的四种设置方法和注意事项
- CPU中的缓存和操作系统中的缓存分别是什么 ?
- php 配置苦难
- java记——玩转阶乘
- libevent代码阅读(8)——“hello-world.c”之 创建监听器
- Dubbo阿里Alibaba开源的分布式服务框架
- stringBuffer拼接有规律字符串
- Google Chrome浏览器中如何使用命令
- PLSQLDeveloper连接远程Oracle数据库
- [AHK]倒计时牌(高考还有多少天这类的)