计算平移/倾斜图像的数量

时间:2014-02-21 09:51:10

标签: c# image image-processing

我目前正在我的应用程序中实现平移/倾斜/缩放支持。我传入一个图像,然后按以下方式计算缩放

int widthPercent = width / 100;
int heightPercent = height / 100;

int zoomX = width - (widthPercent * (int)Zoom);
int zoomY = height - (heightPercent * (int)Zoom);

其中width是原始图像的宽度,height是原始图像的高度,Zoom是从UI传入的值,范围从0到100。

我现在希望在放大图像时实现平移/倾斜支持,以便仍然可以访问整个图像。再次Pan和Tilt将从UI控制(再次从0到100)但我希望它保持在图像的边界内,这样图像就不会重复它当前正在做的事情。

我正在计算Pan和Tilt,如下所示:

// Calculate Pan
int panWidthPercent = width / 100;
int finalPan = (int)Pan * panWidthPercent;

// Calculate Tilt
int tiltHeightPercent = height / 100;
int finalTilt = (int)Tilt * tiltHeightPercent;

这在某种程度上起作用,但是在平移一小段时间后(通常当Pan = 10或更高时)似乎会继续重复图像。我希望它在渲染所有图像后停止,即它达到宽度但添加类似下面的内容似乎不会停止此

if(finalPan >= width) finalPan = width; 

计算出值后,我使用这些值

创建一个源矩形
mClippingRectangle = new Int32Rect(finalPan, finalTilt, zoomX, zoomY);

然后用于对照基本图像以仅渲染该矩形

简而言之,当我已经知道图像的缩放时,如何计算我应该摇摄/倾斜的程度

1 个答案:

答案 0 :(得分:0)

管理通过检查添加到缩放宽度/高度的平移/倾斜量是否大于整个图像宽度/高度来完成它然后停止平移/倾斜

// Calculate Pan
double finalPan = Pan * widthPercent;
if ((finalPan + zoomX) >= width)
{
    finalPan = width - zoomX;
}

// Calculate Tilt
double finalTilt = Tilt * heightPercent;
if ((finalTilt + zoomY) >= height)
{
    finalTilt = height - zoomY;
}