android 调用原生图片裁剪后的图片尺寸缩放

在安卓开发中,如果对拍照后的图片进行图片裁剪,如果是调用系统的裁剪,如下:

/*
	 * 裁剪图片
	 */
	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比来设置图片是放大是横向放大,还是竖向放大,放大后的效果基本上能满足需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值