可缩放 Tkinter 画布上的一致点放置

问题描述 投票:0回答:1

我正在开发一个Python项目,其中有一个画布,其中包含可以在各个点上放大/缩小的图像,我这样做是为了可以在这个画布上放置点。最初在 Zoom_scale 1(没有缩放变化)时,点被正确放置,但是当我放大时,它会缩小到不合适的位置,我无法弄清楚要使用什么函数来计算它们在 512x512 画布上的位置并使它们不移动。

参考:
[[][]

Canvas保持不变512x512,这是我需要坐标的形式。
第一次迭代是有效的(在图像被缩放之前(裁剪并调整大小以适合画布))并且我得到坐标x:73 y:700,我可以通过将它们除以1.5轻松转换为512x512格式(图像大小/画布大小)。但是当我缩放并且图像大小为698x698(缩放倍数为1.1)时,红点开始漂移,它应该是一致的,因此无论我移动画布,该点都会保留在那里,并且如果它超出了画布范围画布我只是不渲染它。

这是当前代码:

  def get_zoomed_image_xy_canvas_position
    (x, y, img_size, canvas_size, cropped_image_bbox, zoom_scale)
    :
        size_factor = img_size/canvas_size/zoom_scale
    
        x /= size_factor
        y /= size_factor
    
        return Vector3(x, 0, y)

Gif参考enter image description here

python canvas coordinates zooming coordinate-transformation
1个回答
0
投票

这样画的缩小版杰作: my masterpiece

有点想通了,非常简单:

def get_zoomed_image_xy_canvas_position(x, y, img_size, canvas_size, crop_bbox, zoom):
x -= crop_bbox[0]
y -= crop_bbox[1]

canvas_scale = (img_size/zoom)/canvas_size
canvas_x = x / canvas_scale
canvas_y = y / canvas_scale

return Vector3(canvas_x, 0, canvas_y)
© www.soinside.com 2019 - 2024. All rights reserved.