【问题标题】:Zooming at mouse position without messing up scrollbars?在不弄乱滚动条的情况下缩放鼠标位置?
【发布时间】:2010-09-07 21:03:19
【问题描述】:

我正在 GTK\C 中创建一个图像编辑程序,但我不知道如何进行缩放;我需要将基于 Cairo 的画布缩放到鼠标光标的位置,但 Cairo 只缩放到它显示的图像的中心。解决这个问题的正常方法是变换、缩放,然后再变换回来;但这弄乱了我画布周围的滚动条。

我的想法是向后滑动滚动条以补偿缩放引起的移动。通过mouse_position * (new_zoom - old_zoom) 移动滚动条应该可以工作,但它没有;它在低缩放级别时校正不足,然后在高级别时过度校正。

如何正确缩放?

我的代码在这里可见,如果有帮助的话:ScreenSnap on Github

【问题讨论】:

    标签: image gtk zooming


    【解决方案1】:

    您似乎需要在代码中将班次缩放到您当前的缩放级别。所以这一行:

    shift_x = self->zoom_point_x * (self->zoom_level / .9 - self->zoom_level);

    应该是:
    shift_x = self->zoom_point_x * (self->zoom_level / .9 - self->zoom_level)/(self->zoom_level);

    请注意,您的近似值在缩放级别为 1 时起作用,但当您移开时,您要么欠正要么过度校正。

    【讨论】:

    • 嗯?如果我替换那条线,那么 self->zoom_point_x 没有任何数据,我需要 shift_x = 线。您的意思是替换它下面的行吗?
    • 嗯...这似乎不起作用。现在它一直在大幅度地欠正。
    猜你喜欢
    • 2016-12-09
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 2020-05-28
    • 2016-04-14
    • 2014-05-17
    • 1970-01-01
    • 2014-05-10
    相关资源
    最近更新 更多