我目前正在我的应用程序中实现平移/倾斜/缩放支持。我传入一个图像,然后按以下方式计算缩放
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);
然后用于对照基本图像以仅渲染该矩形
简而言之,当我已经知道图像的缩放时,如何计算我应该摇摄/倾斜的程度
答案 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;
}