通过精确裁剪图像来删除 while 循环
Posted
技术标签:
【中文标题】通过精确裁剪图像来删除 while 循环【英文标题】:Remove while loop with precise cropping of image 【发布时间】:2013-01-15 23:36:49 【问题描述】:我一直盯着/玩这个代码太久了!
使用currentCrop
(x,y,width,height) 裁剪图像。 currentCrop
是根据图像必须位于的可用尺寸预先计算的。
cropCentre
(x,y) 是一个临时变量,存储裁剪的中心点。
desiredPoint
(x,y) 是图像中希望显示的点,因此一旦计算出裁剪,最好将图像裁剪移动到cropCentre
(因此currentCrop
) 尽可能接近desiredPoint
,但要确保currentCrop
不会超出图像的范围。
以下代码有效,但我确信无需任何 while 循环也可以实现同样的效果:
if ( cropCentre.x < desiredPoint.x )
while( currentCrop.x + currentCrop.width < sourceWidth && cropCentre.x < desiredPoint.x )
cropCentre.x = currentCrop.x + currentCrop.width / 2;
currentCrop.x ++;
else if ( cropCentre.x > desiredPoint.x )
while( currentCrop.x > 0 && cropCentre.x > desiredPoint.x )
cropCentre.x = currentCrop.x + currentCrop.width / 2;
currentCrop.x --;
// code for vertical omitted - if the problem can be solved for x, then the solution for y is identical...
【问题讨论】:
【参考方案1】:currentCrop.x = Math.min(Math.max(desiredPoint.x - currentCrop.width/2, 0), sourceWidth-currentCrop.width)
【讨论】:
以上是关于通过精确裁剪图像来删除 while 循环的主要内容,如果未能解决你的问题,请参考以下文章