通过精确裁剪图像来删除 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 循环的主要内容,如果未能解决你的问题,请参考以下文章

通过动态设置高度来裁剪图像

通过调整图像 url 将图像裁剪为正确大小

通过在 imageview 中绘制圆圈裁剪图像

使用python从二进制图像中裁剪感兴趣区域

通过提供图像 uri 使用图库的直接裁剪功能

实现没有饥饿的while循环以在wpf中重绘图像