Android图片处理:识别图像方向并显示实例教程

2016-02-19 09:08 87 1 收藏

下面这个Android图片处理:识别图像方向并显示实例教程教程由图老师小编精心推荐选出,过程简单易学超容易上手,喜欢就要赶紧get起来哦!

【 tulaoshi.com - 编程语言 】

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

一、识别图像方向
首先在这里提一个概念EXIF(Exchangeable Image File Format,可交换图像文件),具体解释参见Wiki。
简而言之,Exif是一个标准,用于电子照相机(也包括手机、扫描器等)上,用来规范图片、声音、视屏以及它们的一些辅助标记格式。
Exif支持的格式如下:
图像
压缩图像文件:JPEG、DCT
非压缩图像文件:TIFF
不支持:JPEG 2000、PNG、GIF
音频
RIFF、WAV
Android提供了对JPEG格式图像Exif接口支持,可以读取JPEG文件metadata信息,参见ExifInterface.
这些Metadata信息总的来说大致分为三类:日期时间、空间信息(经纬度、高度)、Camera信息(孔径、焦距、旋转角、曝光量等等)。

二、图像旋转
Android中提供了对Bitmap进行矩阵旋转的操作,参见Bitmap提供的静态createBitmap方法. 
public static Bitmap createBitmap (Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter) 

IllegalArgumentException if the x, y, width, height values are outside of the dimensions of the source bitmap. 
到此这两个问题理论上都解决了,开始实际操作一下吧,参照以下代码。
代码如下:

public class IOHelper {
......
/** 从给定路径加载图片*/
public static Bitmap loadBitmap(String imgpath) {
return BitmapFactory.decodeFile(imgpath);
}
/** 从给定的路径加载图片,并指定是否自动旋转方向*/
public static Bitmap loadBitmap(String imgpath, boolean adjustOritation) {
if (!adjustOritation) {
return loadBitmap(imgpath);
} else {
Bitmap bm = loadBitmap(imgpath);
int digree = 0;
ExifInterface exif = null;
try {
exif = new ExifInterface(imgpath);
} catch (IOException e) {
e.printStackTrace();
exif = null;
}
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;
}
}
if (digree != 0) {
// 旋转图片
Matrix m = new Matrix();
m.postRotate(digree);
bm = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(),
bm.getHeight(), m, true);
}
return bm;
}
}
......
}

来源:https://www.tulaoshi.com/n/20160219/1589668.html

延伸阅读
标签: FLASH flash教程
QQ表情已经成为一种流行文化,聊天的时候我们经常会被一些搞怪的QQ表情逗得忍俊不禁。其实有些表情制作也不难,只要掌握一些Flash的基本操作,我们就可以把自己的好创意也制成表情。本实例来自我自己画的一套圆圆&溜溜搞怪表情中的一个,下面是制作过程的详解,希望有助于大家学习Flash动画以及表情制作的基本原理。 下面我们先来看看效...
做为一个前端设计人员,对于产品展示页面的设计一定不会陌生,其中产品图片摆放是必定经历的一步,并且水平居中和垂直居中又是最多的。有时需要产品图片水平垂直居中显示,这种展示用CSS来实现又是比较棘手的一件事,我想很多前端攻程师都有研究过或者说是搜索过这些方法吧。很多网站都是使用table来实现产品图片垂直居中,实现也是相当的方便...
许久没有动手写教程,因为觉得从技法到结构以及动画思维以及镜头感表现之前的分享都已经有较多讲解,再写难免有重复。但是单单发个成品出来分享也许还是会有同学关心一些制作过程和技巧,罗嗦就啰嗦吧,难得这个周末在家困着没事可干。
标签: FLASH flash教程
本教程是关于用Flash来制作一个熊猫举重的动画,作者主要用到椭圆工具,矩形工具和直线工具等,操作简单易懂,感兴趣的网友可以打开Flash一起来学习。希望本教程能给你带来帮助! 北京奥运会上,中国举重队取得了8金1银的好成绩,令国人振奋不已。今天我们就用Flash来制作一个熊猫举重的动画,主要用到椭圆工具,矩形工具和直线工具等...
标签: PHP
  系统标题:复杂检索数据并分页显示的处理方法 系统功能:利用临时表检索数据库数据,然后分页显示的方法: 处理方法:采用临时表存放数据中间结果,根据中间结果显示数据           数据的显示采用隔行的方式处理 处理优点:对于复杂的查询,特别是涉及到多表的数据查询,如果直...

经验教程

807

收藏

72
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部