网上一般都是这种做法:
原图宽srcWidth
原图高srcHeight目标宽TargetWdith
目标高TargetHeightrsize=srcWidth/srcHeightif(srcWidth > TargetWdith){
newWidth=TargetWdith;//就错在这里
newHeight=newWidth/rsize;
}这样计算而来得到的新图片宽度没有超过目标宽度,图片也未失真,但是,新图片的高度不一定就比目标高度小。
原图宽srcWidth
原图高srcHeight目标宽TargetWdith
目标高TargetHeightrsize=srcWidth/srcHeightif(srcWidth > TargetWdith){
newWidth=TargetWdith;//就错在这里
newHeight=newWidth/rsize;
}这样计算而来得到的新图片宽度没有超过目标宽度,图片也未失真,但是,新图片的高度不一定就比目标高度小。
if(srcWidth > TargetWdith){
newWidth=TargetWdith;
newHeight=newWidth/rsize;
}
else
{
newHeight=TargetHeight;
newWidth=newHeight*rsize;
}
∵ 原图宽/原图高 = 目标宽/目标高
∴ 给定目标宽时
目标高 = 目标宽/(原图宽/原图高)当 原图宽 > 目标宽 时缩小
当 原图宽 < 目标宽 时放大
经过我昨晚几小时的研究,终于知道怎么算了,通过比较原图和目标图的比例大小就可以了:
原图宽srcWidth
原图高srcHeight 目标宽TargetWdith
目标高TargetHeight rsize=srcWidth/srcHeight //原图比例
rsize2=TargetWdith/TargetHeight //目标图比例if(rsize>rsize2){
newWidth=TargetWdith;
newHeight=newWidth/rsize;
}