偶尔看到网上一些实现的乱糟糟的算法,于心不忍,贴出来这个函数,以后大家都不用费劲了:
static protected float getRatio(Rect boundRect , int target_width,int target_height)
{float xRatio = (float) 1.0;
float yRatio = (float) 1.0;
float fRatio = (float) 1.0;
//sign bound larger than standard size.
xRatio = target_width / (float)boundRect.width();
yRatio = target_height/ (float)(boundRect.height() * xRatio);
if(xRatio < (float)1.0)//x larger ,and use xRatio
{
if(yRatio < 1.0)//and y still larger
{
fRatio = (target_height)/ (float)boundRect.height();
}else
fRatio = xRatio;
}else
{
fRatio = (target_height)/ (float)boundRect.height();
}
if(fRatio > 1.0) // if boundRect smaller than target area ,keep size of it ,not zoom in.
fRatio = (float) 1.0;
return fRatio;
}