0

我一直盯着/玩这个代码太久了!

使用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...
4

1 回答 1

0

currentCrop.x = Math.min(Math.max(desiredPoint.x - currentCrop.width/2, 0), sourceWidth-currentCrop.width)

于 2013-07-05T07:56:37.453 回答