在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)
Added in API level 1Returns an immutable bitmap from subset of the source bitmap, transformed by the optional matrix. The new bitmap may be the same object as source, or a copy may have been made. It is initialized with the same density as the original bitmap. If the source bitmap is immutable and the requested subset is the same as the source bitmap itself, then the source bitmap is returned and no new bitmap is created.
Parameters
source The bitmap we are subsetting x The x coordinate of the first pixel in source y The y coordinate of the first pixel in source width The number of pixels in each row height The number of rows m Optional matrix to be applied to the pixels filter true if the source should be filtered. Only applies if the matrix contains more than just translation. Throws
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; } } ...... }
相关推荐
解决这个问题很自然想到的分两步走: 1、自动识别图像方向,计算旋转角度; 2、对图像进行旋转并显示。一、识别图像方向 首先在这里提一个概念EXIF(Exchangeable Image File Format,可交换图像文件),具体解释参见...
android 上的识别照片的方位,并且自动转向
本文对车牌识别系统中的图像预处理、车牌定位、字符分割以及字符识别等相关操作过程进行了深入的探讨和研究,继而提出了一套完整的基于Android平台移动终端的车牌识别系统。相关主要内容如下: (1)车牌的预处理及...
识别管道(1) (2) (3) (4) (5) (6) 检测耳朵形状并提取ROI 通过对称填充提高检测到的ROI 提取耳标移除异常值估计耳朵的方向根据正确的角度对齐图像并应用缩放技巧提取图像描述符并使用图库模板计算相似度...
移动应用程序上的自动车牌识别 (ALPR、ANPR) - Android 在 Android 的移动应用程序上获得高精度、开发人员友好的自动车牌识别( ) 或自动车牌识别 ( )! 我们的机器学习软件: 适用于黑暗、低分辨率、模糊图像和...
主要包括Android开发技术基础、获取并编译源码、Android技术核心框架分析、Android传感器系统分析、使用地图定位、光线传感器详解、接近警报传感器详解、磁场传感器详解、加速度传感器详解、方向传感器详解、陀螺仪...
Bitmap是Android系统中的图像处理的最重要类之一。用它可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,并可以指定格式保存图像文件。 重要函数 •public void recycle() // 回收位图占用的内存空间,把...
8.5 将网络图像网址放入gallery中显示 520 8.6 即时访问网络图片文件展示 523 8.7 手机气象局,实时卫星云图 524 8.8 通过网络播放mp3 528 8.9 设置远程下载音乐为手机铃声 534 8.10 远程下载桌面...
3.1 Android的事件处理 145 3.2 基于监听的事件处理 145 3.2.1 事件监听的处理模型 145 3.2.2 事件和事件监听器 148 3.2.3 内部类作为事件监听器类 151 3.2.4 外部类作为事件监听器类 152 3.2.5 ...
在CV领域OpenCV作为开源且功能强大的跨平台计算机视觉库,在图像处理以及图像识别方向得到了广泛应用。但是在Android平台OpenCV官方SDK在图像预览方面存在诸多缺陷。SmartOpenCV是什么SmartOpenCV是一个OpenCV在...
4.求得水平和垂直方向灰度图像的梯度差,使用Sobel算子 5.均值滤波,消除高频噪声 6.二值化 7.闭运算,填充条形码间隙 8. 腐蚀,去除孤立的点 9. 膨胀,填充条形码间空隙,根据核的大小,有可能需要2~...
8.5 将网络图像网址放入Gallery中显示 8.6 即时访问网络图片文件展示 8.7 手机气象局,实时卫星云图 8.8 通过网络播放mp3 8.9 设置远程下载音乐为手机铃声 8.10 远程下载桌面背景图案 8.11 将手机文件上传至网站...
8.5 将网络图像网址放入Gallery中显示 8.6 即时访问网络图片文件展示 8.7 手机气象局,实时卫星云图 8.8 通过网络播放mp3 8.9 设置远程下载音乐为手机铃声 8.10 远程下载桌面背景图案 8.11 将手机文件上传至网站...
8.5 将网络图像网址放入Gallery中显示 8.6 即时访问网络图片文件展示 8.7 手机气象局,实时卫星云图 8.8 通过网络播放mp3 8.9 设置远程下载音乐为手机铃声 8.10 远程下载桌面背景图案 8.11 将手机文件上传至网站...
8.5 将网络图像网址放入Gallery中显示 8.6 即时访问网络图片文件展示 8.7 手机气象局,实时卫星云图 8.8 通过网络播放mp3 8.9 设置远程下载音乐为手机铃声 8.10 远程下载桌面背景图案 8.11 将手机文件上传至网站...
8.5 将网络图像网址放入Gallery中显示 8.6 即时访问网络图片文件展示 8.7 手机气象局,实时卫星云图 8.8 通过网络播放mp3 8.9 设置远程下载音乐为手机铃声 8.10 远程下载桌面背景图案 8.11 将...