1. 程式人生 > >Uri android 選擇圖片或拍照時旋轉了90度問題

Uri android 選擇圖片或拍照時旋轉了90度問題

由於前面的博文中忽略了點內容,所以在這裡補上,下面內容就是解決拍照或者選擇圖片顯示的時候圖片旋轉了90度或者其他度數問題,以便照片可以正面顯示:具體如下:

首先直接看上面博文下的拍完照或者選完圖後處理部分:

Java程式碼  收藏程式碼
  1. @Override  
  2.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  3.         switch (resultCode) {  
  4.         case 1:  
  5.             if (data != null) {  
  6.                 // 取得返回的Uri,基本上選擇照片的時候返回的是以Uri形式,但是在拍照中有得機子呢Uri是空的,所以要特別注意  
  7.                 Uri mImageCaptureUri = data.getData();  
  8.                 // 返回的Uri不為空時,那麼圖片資訊資料都會在Uri中獲得。如果為空,那麼我們就進行下面的方式獲取  
  9.                 if (mImageCaptureUri != null) {  
  10.                     setImage(mImageCaptureUri);// 根據Uri處理並顯示圖片
      
  11.                 }  
  12.             }  
  13.             break;  
  14.         default:  
  15.             break;  
  16.         }  
  17.     }  

 第二:處理90度問題並顯示:

Java程式碼  收藏程式碼
  1. private void setImage(Uri mImageCaptureUri) {  
  2.     // 不管是拍照還是選擇圖片每張圖片都有在資料中儲存也儲存有對應旋轉角度orientation  
  3.     // 所以我們在取出圖片是把角度值取出以便能正確的顯示圖片,沒有旋轉時的效果觀看  
  4.     ContentResolver cr = this
    .getContentResolver();  
  5.     Cursor cursor = cr.query(mImageCaptureUri, nullnullnullnull);// 根據Uri從資料庫中找  
  6.     if (cursor != null) {  
  7.         cursor.moveToFirst();// 把遊標移動到首位,因為這裡的Uri是包含ID的所以是唯一的不需要迴圈找指向第一個就是了  
  8.         String filePath = cursor.getString(cursor.getColumnIndex("_data"));// 獲取圖片路  
  9.         String orientation = cursor.getString(cursor  
  10.                 .getColumnIndex("orientation"));// 獲取旋轉的角度  
  11.         cursor.close();  
  12.         if (filePath != null) {  
  13.             Bitmap bitmap = BitmapFactory.decodeFile(filePath);//根據Path讀取資源圖片  
  14.             int angle = 0;  
  15.             if (orientation != null && !"".equals(orientation)) {  
  16.                 angle = Integer.parseInt(orientation);  
  17.             }  
  18.             if (angle != 0) {  
  19.                 // 下面的方法主要作用是把圖片轉一個角度,也可以放大縮小等  
  20.                 Matrix m = new Matrix();  
  21.                 int width = bitmap.getWidth();  
  22.                 int height = bitmap.getHeight();  
  23.                 m.setRotate(angle); // 旋轉angle度  
  24.                 bitmap = Bitmap.createBitmap(bitmap, 00, width, height,  
  25.                         m, true);// 從新生成圖片  
  26.             }  
  27.             photo.setImageBitmap(bitmap);  
  28.         }  
  29.     }  
  30. }  
 OK完成,需要拍照和選擇圖片功能的部分請看http://104zz.iteye.com/blog/1687662