中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

android調用原生圖片裁剪后圖片尺寸縮放的解決方法

發布時間:2020-10-10 21:41:31 來源:腳本之家 閱讀:453 作者:bluejww 欄目:移動開發

在安卓開發中,如果對拍照后的圖片進行圖片裁剪,如果是調用系統的裁剪,如下:

/* 
  * 裁剪圖片 
  */ 
 private void cropPhoto() { 
 
  Intent intent = new Intent("com.android.camera.action.CROP"); 
  Uri uri = Uri.parse("file://" + picSavePath); 
  intent.setDataAndType(uri, "image/*"); 
  intent.putExtra("crop", "true"); 
  // intent.putExtra("aspectX", 3); 
  // intent.putExtra("aspectY", 2); 
  intent.putExtra("outputX", cropX); 
  intent.putExtra("outputY", cropY); 
  intent.putExtra("scale", "true"); 
  intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); 
  intent.putExtra("return-data", "false"); 
  intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); 
  intent.putExtra("noFaceDetection", "true"); // no face detection 
  startActivityForResult(intent, CROP_PICTURE); 
 } 

這樣,就開始對圖片進行裁剪了,但是這樣會有一個問題,當裁剪框選擇的圖片與錄入的cropX,xropY的形狀不同時,比如傳入的參數值是個w>h的長方形,而選擇框選擇的是w<h的長方形時,這樣會導致裁剪的圖片結果會被壓縮變形。

為了解決壓縮變形的問題,我的思路是這樣的:

1,先對圖片進行裁剪,不設置默認的裁剪圖片尺寸。

2.對裁剪后的圖片再進行圖片的縮放。縮放是采角的矩陣的方式進行的縮放

代碼如下:

1.

/* 
  * 裁剪圖片, 
  */ 
 private void cropPhotoAndZoom() { 
 
  Intent intent = new Intent("com.android.camera.action.CROP"); 
  Uri uri = Uri.parse("file://" + picSavePath); 
  intent.setDataAndType(uri, "image/*"); 
  intent.putExtra("crop", "true"); 
  intent.putExtra("scale", "true"); 
  intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); 
  intent.putExtra("return-data", "false"); 
  intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); 
  intent.putExtra("noFaceDetection", "true"); // no face detection 
  startActivityForResult(intent, CROP_PICTURE_ANDZOOM); 
 } 

2.

/** 
  * 裁剪后,根據裁剪框的長寬比,同時根據圖片的需求縮放尺寸進行縮放 
  * 
  * @param path 
  * @param x 
  *   原始的需求尺寸width 
  * @param y 
  *   heiht 
  * @return 
  */ 
 public static Bitmap toBigZoom(String path, float x, float y) { 
  Log.e("bitmaputil", "path---" + path + "--x--y--" + x + "--" + y); 
  Bitmap bitmap = BitmapFactory.decodeFile(path); 
  if (bitmap != null) { 
 
   int w = bitmap.getWidth(); 
   int h = bitmap.getHeight(); 
   float sx = 0; 
   float sy = 0; 
   if ((float) w / h >= 1) { 
    sx = (float) y / w; 
    sy = (float) x / h; 
    Log.e("bitmaputil---", "w/h--->=1"); 
   } else { 
    sx = (float) x / w; 
    sy = (float) y / h; 
    Log.e("bitmaputil---", "w/h---<1"); 
   } 
   Matrix matrix = new Matrix(); 
   matrix.postScale(sx, sy); // 長和寬放大縮小的比例 
   Bitmap resizeBmp = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true); 
   Log.e("bitmaputil---", "w---" + resizeBmp.getWidth() + "h--" + resizeBmp.getHeight()); 
   return resizeBmp; 
  } 
 
  return null; 
 } 

2中代碼,通過判斷裁剪框的w,h比來設置圖片是放大是橫向放大,還是豎向放大,放大后的效果基本上能滿足需求。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

分宜县| 体育| 安新县| 门源| 长沙县| 孟州市| 丽水市| 蚌埠市| 岫岩| 廉江市| 襄垣县| 奉节县| 射阳县| 会宁县| 云霄县| 县级市| 古交市| 安徽省| 清水县| 天峻县| 福海县| 沧源| 尼玛县| 定西市| 乃东县| 剑川县| 惠水县| 耒阳市| 德州市| 九江市| 翁牛特旗| 安乡县| 淮北市| 辽阳市| 林芝县| 丰城市| 永平县| 偏关县| 乃东县| 宜阳县| 乐都县|