android调用原生图片裁剪后图片尺寸缩放的解决方法
在安卓开发中,如果对拍照后的图片进行图片裁剪,如果是调用系统的裁剪,如下:
/* *裁剪图片 */ privatevoidcropPhoto(){ Intentintent=newIntent("com.android.camera.action.CROP"); Uriuri=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");//nofacedetection startActivityForResult(intent,CROP_PICTURE); }
这样,就开始对图片进行裁剪了,但是这样会有一个问题,当裁剪框选择的图片与录入的cropX,xropY的形状不同时,比如传入的参数值是个w>h的长方形,而选择框选择的是w 为了解决压缩变形的问题,我的思路是这样的: 1,先对图片进行裁剪,不设置默认的裁剪图片尺寸。 2.对裁剪后的图片再进行图片的缩放。缩放是采角的矩阵的方式进行的缩放 代码如下: 1. 2. 2中代码,通过判断裁剪框的w,h比来设置图片是放大是横向放大,还是竖向放大,放大后的效果基本上能满足需求。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
/*
*裁剪图片,
*/
privatevoidcropPhotoAndZoom(){
Intentintent=newIntent("com.android.camera.action.CROP");
Uriuri=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");//nofacedetection
startActivityForResult(intent,CROP_PICTURE_ANDZOOM);
}
/**
*裁剪后,根据裁剪框的长宽比,同时根据图片的需求缩放尺寸进行缩放
*
*@parampath
*@paramx
*原始的需求尺寸width
*@paramy
*heiht
*@return
*/
publicstaticBitmaptoBigZoom(Stringpath,floatx,floaty){
Log.e("bitmaputil","path---"+path+"--x--y--"+x+"--"+y);
Bitmapbitmap=BitmapFactory.decodeFile(path);
if(bitmap!=null){
intw=bitmap.getWidth();
inth=bitmap.getHeight();
floatsx=0;
floatsy=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");
}
Matrixmatrix=newMatrix();
matrix.postScale(sx,sy);//长和宽放大缩小的比例
BitmapresizeBmp=Bitmap.createBitmap(bitmap,0,0,w,h,matrix,true);
Log.e("bitmaputil---","w---"+resizeBmp.getWidth()+"h--"+resizeBmp.getHeight());
returnresizeBmp;
}
returnnull;
}