图片翻转问题
来源:互联网 发布:手机定位软件破解版 编辑:程序博客网 时间:2024/06/07 16:57
最近做项目的时候遇到一个问题,获取相册中的图片或者拍照到ImageView中时,显示在ImageView中的图片方向旋转了,上网百度了一下,终于找到了解决方法。
首先我们要知道问题出在哪里,经过查看手机相册里面的图片的详细信息,我发现其中有方向这个属性,如果方向是0,则显示在ImageView中的图片方向是正的,而如果方向是90度或者180或者270度,那么显示在ImageView中的图片方向就不正,
问题的根源在于存储在手机相册里面的图片的方向有了角度导致显示不正。我一开始一直认为是imageView的显示出了问题,始终找不到解决办法,因此在遇到问题的时候,了解错误的根源才能有效地解决问题,不然就是白费功夫。
下面言归正传,了解到问题所在之后,接下来就是如何解决问题了,既然问题是图片的方向,我们就可以先获取到图片的方向角度,然后旋转把图片方向方正,再显示到imageView中,那么显示出来的图片方向就是正的了。
如何获取和改变图片的方向呢,Android中提供了一个ExifInterface接口,用于获取图像文件的信息:
// 根据图片的filepath获取到一个ExifInterface的对象
ExifInterface exif = null;
try {
exif = new ExifInterface(filepath);
} catch (IOException e) {
e.printStackTrace();
exif = null;
}
// 接下来获取图片的方向角度:
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进行矩阵旋转的操作:
if (digree != 0) {
// 旋转图片
Matrix m = new Matrix();
m.postRotate(digree);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
bitmap.getHeight(), m, true);
}
// 此时得到的Bitmap就是经过旋转后的Bitmap,显示出来的方向是正的,如果图片较大,还可以对其进行一定的压缩操作之后在放入ImageView之中。
首先我们要知道问题出在哪里,经过查看手机相册里面的图片的详细信息,我发现其中有方向这个属性,如果方向是0,则显示在ImageView中的图片方向是正的,而如果方向是90度或者180或者270度,那么显示在ImageView中的图片方向就不正,
问题的根源在于存储在手机相册里面的图片的方向有了角度导致显示不正。我一开始一直认为是imageView的显示出了问题,始终找不到解决办法,因此在遇到问题的时候,了解错误的根源才能有效地解决问题,不然就是白费功夫。
下面言归正传,了解到问题所在之后,接下来就是如何解决问题了,既然问题是图片的方向,我们就可以先获取到图片的方向角度,然后旋转把图片方向方正,再显示到imageView中,那么显示出来的图片方向就是正的了。
如何获取和改变图片的方向呢,Android中提供了一个ExifInterface接口,用于获取图像文件的信息:
// 根据图片的filepath获取到一个ExifInterface的对象
ExifInterface exif = null;
try {
exif = new ExifInterface(filepath);
} catch (IOException e) {
e.printStackTrace();
exif = null;
}
// 接下来获取图片的方向角度:
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进行矩阵旋转的操作:
if (digree != 0) {
// 旋转图片
Matrix m = new Matrix();
m.postRotate(digree);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
bitmap.getHeight(), m, true);
}
// 此时得到的Bitmap就是经过旋转后的Bitmap,显示出来的方向是正的,如果图片较大,还可以对其进行一定的压缩操作之后在放入ImageView之中。
0 0
- 图片翻转问题
- CCOrbitCamera 翻转图片的问题
- iOS 视频、图片翻转问题
- moto v系列图片翻转问题
- 图片翻转
- 图片翻转
- 图片翻转
- 图片翻转
- 图片翻转
- 图片翻转
- 图片像素翻转。水平翻转,垂直翻转。
- 图片翻转切换图片
- IOS-解决自定义UIImagePickerController 后的图片翻转问题
- iOS上传相册图片到服务器端显示位置翻转问题
- 解决上传iphone拍照的图片自动翻转的问题
- Flash中翻转图片
- 新闻图片翻转JS
- CSS图片翻转
- 卸载 Office 2016 for Mac
- Android studio集成HotFix
- 机器学习系列(17)_Yelper推荐系统
- DHTML改变新闻的字体大小
- poj 2993 Emag eht htiw Em Pleh
- 图片翻转问题
- Android使用第三方控件实现侧滑删除
- 程序流程控制
- 全排列问题及其follow-up
- Android利用Jsoup解析html 开发网站客户端小记。
- JS 控制文本框只能输入中文、英文、数字与指定特殊符号
- 深度学习与自然语言处理(2)_斯坦福cs224d Lecture 2
- linux中的pid与tid
- struts2 中chain、redirect、redirectaction的区别