我一直盯着/玩这个代码太久了!
使用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...