android調(diào)用原生圖片裁剪后圖片尺寸縮放的解決方法
在安卓開發(fā)中,如果對拍照后的圖片進行圖片裁剪,如果是調(diào)用系統(tǒng)的裁剪,如下:
/*
* 裁剪圖片
*/
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的形狀不同時,比如傳入的參數(shù)值是個w>h的長方形,而選擇框選擇的是w<h的長方形時,這樣會導(dǎo)致裁剪的圖片結(jié)果會被壓縮變形。
為了解決壓縮變形的問題,我的思路是這樣的:
1,先對圖片進行裁剪,不設(shè)置默認的裁剪圖片尺寸。
2.對裁剪后的圖片再進行圖片的縮放??s放是采角的矩陣的方式進行的縮放
代碼如下:
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.
/**
* 裁剪后,根據(jù)裁剪框的長寬比,同時根據(jù)圖片的需求縮放尺寸進行縮放
*
* @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比來設(shè)置圖片是放大是橫向放大,還是豎向放大,放大后的效果基本上能滿足需求。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android TabLayout實現(xiàn)京東詳情效果
這篇文章主要為大家詳細介紹了android TabLayout實現(xiàn)京東詳情效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09
一文詳解Jetpack?Android新一代導(dǎo)航管理Navigation
這篇文章主要為大家介紹了Jetpack?Android新一代導(dǎo)航管理Navigation詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03
Android開發(fā)中Google為什么不讓用Handler的runWithScissors()
這篇文章主要介紹了Android開發(fā)中Google為什么不讓用Handler的runWithScissors(),本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09
Android 獲取內(nèi)外SD卡路徑幾種方法總結(jié)
這篇文章主要介紹了Android 獲得內(nèi)外SD卡路徑幾種方法總結(jié)的相關(guān)資料,需要的朋友可以參考下2016-12-12
android基本控件ToggleButton&Switch使用指南
本文給大家匯總介紹了android的2個基本控件ToggleButton和Switch的使用方法,非常的詳細,有需要的小伙伴可以參考下。2016-01-01

