假设图像中有一个三角形。我们放大图像,缩放的中心是我们的光标所在的位置。
三角形需要随着图像的缩放进行平移和缩放。
例如,在原始的未缩放图像中,我有以下几点:
原始图像三角形:(212162(,(172162(
然后,放大后,我们得到分数:
2倍变焦三角形:(231173(、(151173(、
这是我知道的一些信息。x和y从原始图像到新图像的偏移量分别为97和76。图像按因子2缩放。此外,实际图像大小,即像素的x和y数量,保持不变。
我能够使用根据原始帧的点正确计算新点的位置
x = (og_x-ZoomOffsetX)*ZoomLevel + ZoomLevel/2;
y = (og_y-ZoomOffsetY)*ZoomLevel + ZoomLevel/2;
其中,og_x、og_y是原始帧中的x和y,offsetX和y是基于我们在帧上放大的位置(相对于原始图像(的偏移,ZoomLevel是我们放大的因子(相对于原始图片(,它上升2,4,8…
然后,下一组点是
4倍变焦三角形:(218222(,(58222(,(138,62(
其中缩放现在距离原始值为4倍,相对于原始值,x和y偏移分别为158和107。
然后,
8倍变焦三角形:(236340(,(-84340(,(76,20(
其中缩放现在是原始缩放的8倍,x和y偏移分别为183和120。
我需要知道什么/我需要什么参数,才能仅基于前一张图像给出现在缩放和平移(由于缩放(的三角形的新(x,y(坐标?即基于4倍变焦的8倍变焦与基于原始图像的8倍缩放。根据我掌握的信息,我想不通。
注意:无论偏移是相对于原始图像还是先前图像,我实际上都不确定。。我正在阅读别人的代码并试图理解它。不过ZoomLevel绝对是相对于原始图像的。
此外,如果它有助于提出解决方案,那么这一切都是用cpp编写的,这种缩放是在qt小部件中完成的,其中使用qt 中的QPointF定义点
这三个链接彻底回答了我的问题。
https://medium.com/@benjamin.bott/zooming-at-the-mouse-coordinates-with-affine-transformations-86e7312fd50b
使用矩阵放大固定点
放大一个点(使用缩放和平移(