最近做项目的时候遇到一个问题,获取相册中的图片或者拍照到ImageView中时,显示在ImageView中的图片方向旋转了,上网百度了一下,终于找到了解决方法。

首先我们要知道问题出在哪里,经过查看手机相册里面的图片的详细信息,我发现其中有方向这个属性,如果方向是0,则显示在ImageView中的图片方向是正的,而如果方向是90度或者180或者270度,那么显示在ImageView中的图片方向就不正,问题的根源在于存储在手机相册里面的图片的方向有了角度导致显示不正。我一开始一直认为是imageView的显示出了问题,始终找不到解决办法,因此在遇到问题的时候,了解错误的根源才能有效地解决问题,不然就是白费功夫。

下面言归正传,了解到问题所在之后,接下来就是如何解决问题了,既然问题是图片的方向,我们就可以先获取到图片的方向角度,然后旋转把图片方向方正,再显示到imageView中,那么显示出来的图片方向就是正的了。

如何获取和改变图片的方向呢,android中提供了一个ExifInterface接口,用于获取图像文件的信息:

?
1
2
3
4
5
6
7
8
 //根据图片的filepath获取到一个ExifInterface的对象
 ExifInterface exif = null;  
         try {  
             exif = new ExifInterface(filepath);  
         catch (IOException e) {  
             e.printStackTrace();  
             exif = null;  
         }

接下来获取图片的方向角度:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int degree=0;
if (exif != null) {  
             // 读取图片中相机方向信息  
             int ori = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION,  
                     ExifInterface.ORIENTATION_UNDEFINED);  
             // 计算旋转角度  
             switch (ori) {  
             case ExifInterface.ORIENTATION_ROTATE_90:  
                 digree = 90;  
                 break;  
             case ExifInterface.ORIENTATION_ROTATE_180:  
                 digree = 180;  
                 break;  
             case ExifInterface.ORIENTATION_ROTATE_270:  
                 digree = 270;  
                 break;  
             default:  
                 digree = 0;  
                 break;  
             }

获取到角度之后,就是要根据角度来旋转图片使其的角度变为0,在android中提供了对Bitmap进行矩阵旋转的操作:

?
1
2
3
4
5
6
7
 if (digree != 0) {  
             // 旋转图片  
             Matrix m = new Matrix();  
             m.postRotate(digree);  
             bitmap = Bitmap.createBitmap(bitmap, 00, bitmap.getWidth(),  
                     bitmap.getHeight(), m, true);  
         }

此时得到的Bitmap就是经过旋转后的Bitmap,显示出来的方向是正的,如果图片较大,还可以对其进行一定的压缩操作之后在放入ImageView之中。

android图片显示的方向问题相关推荐

  1. android图片显示代码,Android图片处理:识别图像方向并显示(示例代码)

    在Android中使用ImageView显示图片的时候发现图片显示不正.方向偏了或者倒过来了. 解决问题非常自然想到的分两步走:1.自己主动识别图像方向,计算旋转角度. 2.对图像进行旋转并显示. 一 ...

  2. android图片显示Picasso与Glide

    Glide 和 Picasso 可以说是目前 Android 上最流行的图片加载库了.大部分安卓应用开发人员都有使用过这两个库在他们的开发工作中.这两个库也都确实提供了大量图片加载的功能,而且也都经过 ...

  3. android图片显示组件,Android可循环显示图像的Android Gallery组件用法实例

    本文实例分析了Android可循环显示图像的Android Gallery组件用法.分享给大家供大家参考,具体如下: Gallery组件主要用于横向显示图像列表,不过按常规做法.Gallery组件只能 ...

  4. Android——图片显示

    遇到的问题: 1.在现在Android开发中很多需要用户设置,例如头像,主要包括拍照和从相册选取,注意:这是选择1张图片与微信朋友圈和微博从相册选取图片不同(一次选多张): 2.是否需要裁减,裁减形状 ...

  5. android 图片显示崩溃

    106.186.115.23811111111111111111 b#y#c5152! BitmapFactory.Options options = new BitmapFactory.Option ...

  6. android图片展示图片,Android图片展示详解(一)

    Android图片显示详解(一) 说明: 本讲义分为三部分,较为详细的介绍了Android平台下图片显示,加载等操作的处理原则与办法,以供大家共同学习,转载请注明出处 "From 移动微技& ...

  7. android 图片方向,Android图片处理:识别图像方向并显示

    在Android中使用ImageView显示图片的时候发现图片显示不正.方向偏了或者倒过来了. 解决问题非常自然想到的分两步走: 1.自己主动识别图像方向,计算旋转角度. 2.对图像进行旋转并显示. ...

  8. android拍照保存照片方向,android 拍照的照片方向问题,读取图片EXIF信息

    Exif是一种图象文件格式,它的数据存储与JPEG格式是完全相同的.实际上Exif格式就是在JPEG格式头部插入了数码照片的信息,包括拍摄时的光圈.快门.白平衡.ISO.焦距.日期时间等各种和拍摄条件 ...

  9. android图片系统解决方案-从采集到显示

    概述 Android上图片涉及到的要点: 基础 自定义相机拍照 调用系统相机拍照 图片选择 裁剪 压缩 上传 服务端处理与下载 显示与内存-普通图与超大图 文件夹管理 内置图片管理与包大小 基础 颜色 ...

最新文章

  1. Atom 插件手动安装
  2. Unity UI和引用的管理中心
  3. Java NIO学习系列六:Java中的IO模型
  4. 思考: 什么时候需要disable MMU/i-cache/d-cache?
  5. java用户界面—创建一个面板
  6. K-均值对地图上的点进行聚类(2)
  7. 普里姆(Prim)求最小生成树
  8. 2019编译ffepeg vs_如何在windows10下使用vs2017编译最新版本的FFmpeg和ffplay
  9. Vue(MVVM)、React(MVVM)、Angular(MVC)对比
  10. C语言基础教程之enum
  11. java经典实例 源代码_100个Java经典编程实例源代码JAVA源码下载
  12. 细数SAP Business One主流实施与服务商
  13. mysql复制表 复制表结构和数据 改变字段
  14. 我的世界只支持java8_我的世界minecraft 1.8以上版本forge安装支持哪一种java?7还是8?...
  15. 云原生落地实践的25个步骤
  16. Win10任务栏假死问题解决方案
  17. 《C程序设计》读后感
  18. div html 下边加横线_css字体下边横线 html超链接更改颜色和去掉下划线
  19. VBA中byref类型不匹配 ByRef Argument Type Mismatch错误
  20. MATLAB画图使用不同的线型、点及标记

热门文章

  1. ubuntu20.4 无线网卡AX211 无法连接wifi
  2. 270w+数据量级 | CnOpenData地方政府留言文本数据简介
  3. ios java模拟器 2017_Xcode9之更好用的iOS Simulator(模拟器)
  4. 腾讯QQ验证码识别dll,识别正确率95%+
  5. 计算机 学院派,总校计算机学院派老师来校召开“2+2”联合培养班学生见面会...
  6. java访问excel表格_Java读取excel表格(示例代码)
  7. C语言版家谱管理系统
  8. java实现支付宝二维码支付(Spring Boot)
  9. 数学建模,8月学习感想
  10. 手把手教你实现一个人脸认证登录系统