国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android圖片處理:識(shí)別圖像方向并顯示實(shí)例教程

2020-04-11 12:09:40
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
在Android中使用ImageView顯示圖片的時(shí)候發(fā)現(xiàn)圖片顯示不正,方向偏了或者倒過(guò)來(lái)了。
解決這個(gè)問(wèn)題很自然想到的分兩步走:
1、自動(dòng)識(shí)別圖像方向,計(jì)算旋轉(zhuǎn)角度;
2、對(duì)圖像進(jìn)行旋轉(zhuǎn)并顯示。

一、識(shí)別圖像方向
首先在這里提一個(gè)概念EXIF(Exchangeable Image File Format,可交換圖像文件),具體解釋參見(jiàn)Wiki。
簡(jiǎn)而言之,Exif是一個(gè)標(biāo)準(zhǔn),用于電子照相機(jī)(也包括手機(jī)、掃描器等)上,用來(lái)規(guī)范圖片、聲音、視屏以及它們的一些輔助標(biāo)記格式。
Exif支持的格式如下:
圖像
壓縮圖像文件:JPEG、DCT
非壓縮圖像文件:TIFF
不支持:JPEG 2000、PNG、GIF
音頻
RIFF、WAV
Android提供了對(duì)JPEG格式圖像Exif接口支持,可以讀取JPEG文件metadata信息,參見(jiàn)ExifInterface.
這些Metadata信息總的來(lái)說(shuō)大致分為三類(lèi):日期時(shí)間、空間信息(經(jīng)緯度、高度)、Camera信息(孔徑、焦距、旋轉(zhuǎn)角、曝光量等等)。

二、圖像旋轉(zhuǎn)
Android中提供了對(duì)Bitmap進(jìn)行矩陣旋轉(zhuǎn)的操作,參見(jiàn)Bitmap提供的靜態(tài)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. 
到此這兩個(gè)問(wèn)題理論上都解決了,開(kāi)始實(shí)際操作一下吧,參照以下代碼。
復(fù)制代碼 代碼如下:

public class IOHelper {
......
/** 從給定路徑加載圖片*/
public static Bitmap loadBitmap(String imgpath) {
return BitmapFactory.decodeFile(imgpath);
}
/** 從給定的路徑加載圖片,并指定是否自動(dòng)旋轉(zhuǎn)方向*/
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) {
// 讀取圖片中相機(jī)方向信息
int ori = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_UNDEFINED);
// 計(jì)算旋轉(zhuǎn)角度
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) {
// 旋轉(zhuǎn)圖片
Matrix m = new Matrix();
m.postRotate(digree);
bm = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(),
bm.getHeight(), m, true);
}
return bm;
}
}
......
}
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 巩留县| 宁国市| 安阳市| 怀集县| 宜兰市| 隆化县| 司法| 巴塘县| 无锡市| 成都市| 温宿县| 绥化市| 通渭县| 平乡县| 游戏| 民丰县| 耒阳市| 裕民县| 叙永县| 竹山县| 聊城市| 建昌县| 普洱| 洛隆县| 龙井市| 满城县| 抚州市| 德令哈市| 拉萨市| 博兴县| 金寨县| 惠东县| 化州市| 固原市| 时尚| 疏附县| 湖州市| 霍城县| 瑞金市| 陵川县| 鄢陵县|