您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)怎么在Android中使用ExifInterface判斷Camera圖片的方向,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
Android的Camera相關(guān)應(yīng)用開(kāi)發(fā)中,有一個(gè)必須搞清楚的知識(shí)點(diǎn),就是Camera的預(yù)覽方向和拍照方向
圖像的Sensor方向:手機(jī)Camera的圖像數(shù)據(jù)都是來(lái)自于攝像頭硬件的圖像傳感器(Image Sensor),這個(gè)Sensor被固定到手機(jī)之后是有一個(gè)默認(rèn)的取景方向的,這個(gè)方向如下圖所示,坐標(biāo)原點(diǎn)位于手機(jī)橫放時(shí)的左上角:
android應(yīng)用里使用相機(jī)圖片時(shí)必須要考慮的一個(gè)問(wèn)題就是圖片朝向,只有判斷對(duì)朝向才能調(diào)整圖片從而更好的展現(xiàn)。本文將介紹一種通過(guò)ExifInterface判斷圖片朝向的方法!上代碼:
/** * 利用給定路徑下的圖片設(shè)置ImageView * @param imgPath 手機(jī)圖片文件路徑 * @param imgView 需要設(shè)置的ImageView */ public void setImg(String imgPath, ImageView imgView) { File file = new File(imgPath); if (file.exists() && file.canRead()) { // -------1.圖片縮放-------- // 手機(jī)屏幕信息 DisplayMetrics metric = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metric); int dw = metric.widthPixels; // 屏幕寬 int dh = metric.heightPixels; // 屏幕高 // 加載圖像,只是為了獲取尺寸 BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; // 設(shè)置之后可以獲取尺寸信息 Bitmap bitmap = BitmapFactory.decodeFile(imgPath, options); // 計(jì)算水平和垂直縮放系數(shù) int heightRatio = (int) Math.ceil(options.outHeight / (float) dh); int widthRatio = (int) Math.ceil(options.outWidth / (float) dw); // 判斷哪個(gè)大 if (heightRatio > 1 && widthRatio > 1) { if (heightRatio > widthRatio) { options.inSampleSize = heightRatio; } else { options.inSampleSize = widthRatio; } } // 圖片縮放 options.inJustDecodeBounds = false; bitmap = BitmapFactory.decodeFile(imgPath, options); // -------2.判斷圖片朝向-------- try { ExifInterface exif = new ExifInterface(imgPath); int degree = 0; // 圖片旋轉(zhuǎn)角度 if (exif != null) { int orientation = exif.getAttributeInt( ExifInterface.TAG_ORIENTATION, -1); if (orientation != -1) { switch (orientation) { case ExifInterface.ORIENTATION_ROTATE_90: degree = 90; break; case ExifInterface.ORIENTATION_ROTATE_180: degree = 180; break; case ExifInterface.ORIENTATION_ROTATE_270: degree = 270; break; default: break; } } } if (degree != 0) { // 圖片需要旋轉(zhuǎn) int width = bitmap.getWidth(); int height = bitmap.getHeight(); Matrix matrix = new Matrix(); matrix.preRotate(degree); Bitmap mRotateBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true); imgView.setImageBitmap(mRotateBitmap); } else { imgView.setImageBitmap(bitmap); } } catch (IOException e) { } } }
Android是一種基于Linux內(nèi)核的自由及開(kāi)放源代碼的操作系統(tǒng),主要使用于移動(dòng)設(shè)備,如智能手機(jī)和平板電腦,由美國(guó)Google公司和開(kāi)放手機(jī)聯(lián)盟領(lǐng)導(dǎo)及開(kāi)發(fā)。
看完上述內(nèi)容,你們對(duì)怎么在Android中使用ExifInterface判斷Camera圖片的方向有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。