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

首頁 > 系統 > Android > 正文

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

2019-12-12 03:31:12
字體:
來源:轉載
供稿:網友

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

/*   * 裁剪圖片   */  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比來設置圖片是放大是橫向放大,還是豎向放大,放大后的效果基本上能滿足需求。

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永川市| 平果县| 绥化市| 张家港市| 武汉市| 隆化县| 无棣县| 卢龙县| 呼伦贝尔市| 苏尼特左旗| 和林格尔县| 夏津县| 临湘市| 蓬溪县| 衡阳县| 罗源县| 大荔县| 万安县| 宜君县| 广灵县| 清新县| 麟游县| 芒康县| 赞皇县| 定兴县| 肃南| 大石桥市| 蚌埠市| 阿拉善右旗| 临湘市| 延安市| 潼南县| 杭州市| 大竹县| 新巴尔虎右旗| 宣武区| 利辛县| 临武县| 淮北市| 太原市| 大安市|