如题,相信很多开发者在调用系统照相机接收拍好的照片时,发现照片被无故旋转了90度。这一问题反映在大部分的三星手机上,当然其他的机器还没试完全,总之是有问题。

于是乎想到如下的解决办法:

识别机型,获取手机型号,然后判断是否需要旋转;

通过获取照片宽度和高度判断是否需要旋转;

自己动手写一个照相机Activity,自己来获取摄像头数据,保存照片;

分析发生旋转的照片数据,动态判断是否需要旋转,以及旋转正确的角度。

前三种方法均不是理想的解决方案。

首先说1:这种类似于穷举的办法,总会有那些被遗忘的“角落”,维护这些机型会很繁琐;

然后说2:如果这样的话,如果刚好用户要横屏照照片,还是会发生旋转;

最后说3:这种方法岂是我等“懒”程序员所能做到的?(PS:其实是需求所限啦,自己写照相APP,耗时+费精力+容易出bug。好处就在于用户会感觉自己始终处于同一APP中,而不是发生了跳转。)

那么第四种方案是如何做到的呢?

首先通过分析,通常一张照片包含许多EXIF信息。这些信息包含了拍照的设备,曝光度,是否使用了闪光灯种种内容。这其中包括了角度,也就是旋转问题的症结所在。

手机自身的照片查看器(某些机型)在显示照片的时候,会分析这些信息,当分析的角度的信息时,会自动旋转照片到合适的角度。比较常见的角度是90、180、270。大部分的三星手机在竖屏拍照的时候会拍出角度为90度的照片,横屏为0度。因此,解决的思路就是按照EXIF中的角度信息进行旋转即可。主要用到安卓API中的Matrix。关键代码可参考下面的代码片:

ExifInterface exifInterface = new ExifInterface(APPCFG.IMAGE_FILE);
int orientationDegree = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
Matrix matrix = new Matrix();
matrix.reset();
if (orientationDegree == ExifInterface.ORIENTATION_ROTATE_90) {
matrix.postRotate(90);
}
if (orientationDegree == ExifInterface.ORIENTATION_ROTATE_180) {
matrix.postRotate(180);
}
if (orientationDegree == ExifInterface.ORIENTATION_ROTATE_270) {
matrix.postRotate(270);
}
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),bitmap.getHeight(), matrix, true);

上述代码中,bitmap是Bitmap对象,我这里需要在后面显示,所以暂时没有recycle(),提醒大家一下,免得内存溢出。

到此,无论是三星还是什么机型,利用这种通用的方法,即可解决照片旋转的问题了。

createbitmap 旋转90度_解决某些机型调用系统相机照片旋转的问题相关推荐

  1. java文字旋转90度_菜鸟求助:在 JAVA APPLET 里如何旋转 90 度显示一个字符?

    | import java.awt.*; import java.awt.event.*; import javax.swing.*; class TextRotatePanel extends JP ...

  2. 将视频旋转90度的解决方法

    我使用的是HTC G7的手机,用手机拍到的视频拿到电脑上来播放,需要偏着头来看,有时视频甚至是倒立着的.因此,我一直在寻思着如何解决这个问题,但在今天,我终于找到了一个完美的解决方案,能将视频按照需要 ...

  3. createbitmap 旋转90度_小学数学,图形的运动,平移与旋转

    对称现象在我们生活中非常常见,小到我们的衣服,大到各种建筑.比如说北京天安门城楼也是对称的.对称的物体有个特点,看着比较美观.协调.如果是运动物体,它相对的平衡性也好.比如说飞机是对称的,我们放的风筝 ...

  4. android 部分手机Camera 拍照 图片被旋转90度的解决方法

    部分手机拍照完后 图片旋转角度90度,目前解决方法普遍都是通过图片路径,获取图片信息判断角度,然后转换角度.如下: /*** 读取图片属性:旋转的角度* @param path 图片绝对路径* @re ...

  5. android camera 图片被旋转,android 部分手机Camera 拍照 图片被旋转90度的解决方法

    部分手机拍照完后 图片旋转角度90度,目前解决方法普遍都是通过图片路径,获取图片信息判断角度,然后转换角度.如下: /** * 读取图片属性:旋转的角度 * @param path 图片绝对路径 * ...

  6. fastreport 旋转90度_水冷必不可少之90度弯头

    点击蓝字关注我们 设计于Bitspower而言 是生活,专注当下,发现需求迎合需求 是呼吸,将持续在道上,创新永不止步 BP所研发的水冷接头一直以来是众多玩家认可的逸品,兼具质感与特色,赋予水冷无限可 ...

  7. createbitmap 旋转90度_如何旋转的位图90度

    here is the statement in android canvas.drawBitmap(visiblePage, 0, 0, paint); Now I add canvas.rotat ...

  8. java图像旋转90度_旋转图像90度在java

    使用此方法. /** * Rotates an image. Actually rotates a new copy of the image. * * @param img The image to ...

  9. YUV数据格式的转换(NV12ToI420)和旋转(旋转90度)

    1.几种常见格式的YUV数据 I420(YU12):先存Y,然后U,最后V.YYYYYYYYUUVV YV12:先存Y,然后V,最后U.YYYYYYYYVVUU NV12:先存Y,然后UV交错存储,i ...

最新文章

  1. 利用phpmailer类邮件发送
  2. 分分合合分分,谷歌医疗走向大败退
  3. 20172332 2017-2018-2 《程序设计与数据结构》实验三报告
  4. 长沙中级职称计算机考试时间,湖南土木工程中级职称注册及每年考试时间是什么时候...
  5. 17 合作伙伴角色‘OA’不允许用于科目组xxxx的供应商
  6. RabbitMQ使用guest登录报错:User can only log in via localhost
  7. 思科警告: Nexus 交换机受严重缺陷影响
  8. 排序算法积累(3)-----快速排序
  9. 图解: 线程状态转换(线程生命周期这一篇够用了)
  10. 联想重装系统去掉保护_解决联想硬盘保护系统忘记密码问题,重新安装Windows10系统...
  11. 苹果自带的清理软件_苹果电脑清理软件哪个好?对比CleanMyMac和腾讯柠檬清理软件...
  12. Kubuntu终端中文显示一半解决办法
  13. pandas学习笔记-DataFrame(2)
  14. HmailServer部署应用(完整过程,含故障处理)
  15. 如何在pdf文件上进行电子签名
  16. poi导出excel详解
  17. python动作捕捉_树莓派动作捕捉抓拍存储图像脚本
  18. JQ中的“对象不支持此方法或属性”
  19. Form表单 JSON Content-type解析
  20. 视频教程-2020年软考系统分析师--综合知识视频培训课程-软考

热门文章

  1. C++ Builder 实现动态生成窗口、控件,以及处理控件事件(转载)
  2. php算法和数据结构
  3. php 多态实现案例
  4. 採集和输出 DeckLink Studio 4K
  5. spring 配置异步要点
  6. poj 1724 有限制的最短距离(优先队列+链表)
  7. lua 获得系统时间
  8. elasticsearch的简介_以及实现原理---全文检索引擎ElasticSearch工作笔记001
  9. 基于Spring Security的认证授权_连接数据库查询权限_Spring Security OAuth2.0认证授权---springcloud工作笔记131
  10. C/C++网络编程工作笔记0001---网络编程的基本概念