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

2016-02-19 09:08 92 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;
}
}
......
}

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

延伸阅读
许久没有动手写教程,因为觉得从技法到结构以及动画思维以及镜头感表现之前的分享都已经有较多讲解,再写难免有重复。但是单单发个成品出来分享也许还是会有同学关心一些制作过程和技巧,罗嗦就啰嗦吧,难得这个周末在家困着没事可干。
标签: FLASH flash教程
效果演示: 一、打开Flash,新建一个空白文档,设置下背景色,我这里设置的是绿色,你可以根据你的喜好去设置哈~ 然后按CTRL+F8新建一个影片剪辑,命名为茶。 二、开始画茶杯(因为刚新建影片剪辑了,所以这会应该是在名为茶的影片剪辑中了喔~)。把填充色设置为无,线条色选个颜色,然后先用椭圆工具画一个椭圆,再用线条工具画一条直线...
标签: FLASH flash教程
QQ表情已经成为一种流行文化,聊天的时候我们经常会被一些搞怪的QQ表情逗得忍俊不禁。其实有些表情制作也不难,只要掌握一些Flash的基本操作,我们就可以把自己的好创意也制成表情。本实例来自我自己画的一套圆圆&溜溜搞怪表情中的一个,下面是制作过程的详解,希望有助于大家学习Flash动画以及表情制作的基本原理。 下面我们先来看看效...
做为一个前端设计人员,对于产品展示页面的设计一定不会陌生,其中产品图片摆放是必定经历的一步,并且水平居中和垂直居中又是最多的。有时需要产品图片水平垂直居中显示,这种展示用CSS来实现又是比较棘手的一件事,我想很多前端攻程师都有研究过或者说是搜索过这些方法吧。很多网站都是使用table来实现产品图片垂直居中,实现也是相当的方便...
标签: PS教程
步骤方法: 第一步:按ctrl+o打开原图素材 第二步:选择菜单栏—图像—调整—曲线。选择自动。 第三步:选择背景—按Ctrl + J 把背景图层复制一层,将得到背景副本图层。 选择背景副...

经验教程

562

收藏

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