博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解决Android通过BitmapFactory获取图片宽高度相反的问题
阅读量:6795 次
发布时间:2019-06-26

本文共 1869 字,大约阅读时间需要 6 分钟。

前言

常见通过BitmapFactory获取图片的宽高度的代码如下:

BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBounds = true;Bitmap bitmap = BitmapFactory.decodeFile("{IMAGE_PATH}", options);int width = options.outWidth;int height = options.outHeight;复制代码

使用上述代码,在图片未旋转的情况下得到的结果是正确的。但是如果图片需要旋转90度或者270度才能正确显示时,上述代码获取的宽度则是相反的(及获取到的宽度实际上为图片的高度,高度亦然)。

所以,我们需要通过判断图片显示需要旋转的度数来确定图片真实的宽高。

在Android中可以通过ExifInterface来获取图片的旋转方向。具体代码如下:

try{      ExifInterface exifInterface = new ExifInterface({IMAGE_PATH});      int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); return orientation;}catch (IOException e){    e.printStackTrace();      return ExifInterface.ORIENTATION_NORMAL;}复制代码

获取到方向之后,就可以通过方向的值来获取正确的图片宽高。完整代码如下:

public static Size getImageSize(String imageLocalPath){    BitmapFactory.Options options = new BitmapFactory.Options();    options.inJustDecodeBounds = true;    Bitmap bitmap = BitmapFactory.decodeFile("{IMAGE_PATH}", options);    int width = options.outWidth;    int height = options.outHeight;        int orientation = getImageOrientation(imageLocalPath);    switch(orientation)    {        case ExifInterface.ORIENTATION_ROTATE_90:        case ExifInterface.ORIENTATION_ROTATE_270:        {            return new Size(height, width);        }        default:        {            return new Size(width, height);        }    }}public static int getImageOrientation(String imageLocalPath){    try    {          ExifInterface exifInterface = new ExifInterface({IMAGE_PATH});          int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); return orientation;`   }    catch (IOException e)    {        e.printStackTrace();          return ExifInterface.ORIENTATION_NORMAL;    }}复制代码

转载于:https://juejin.im/post/5a940b8ff265da4e8263703a

你可能感兴趣的文章
java NIO
查看>>
[2134]数据结构实验之栈四:括号匹配 sdutOJ
查看>>
C#复数类的总结
查看>>
.Net开发复习与总结
查看>>
managedwifi.codeplex.com
查看>>
python基础:名称空间与作用域
查看>>
C++中引用和指针详解
查看>>
初识async函数
查看>>
厉害的网站
查看>>
自动化运维工具ansible学习+使用ansible批量推送公钥到远程主机
查看>>
zencart简单设置分类链接不同css样式
查看>>
DedeCms织梦发布文章时输入Tag标签逗号自动变成英文标点的方法
查看>>
C语言宏中#和##的用法
查看>>
esxi虚机迁移到Workstation
查看>>
杭电21题 Palindrome
查看>>
何为PostgreSQL?
查看>>
产品设计草图集
查看>>
【js】两个数相除有余数时结果加1
查看>>
一步一步构建手机WebApp开发——页面布局篇
查看>>
阅读Unity官方技术blog笔记
查看>>