【发布时间】:2021-05-15 13:12:20
【问题描述】:
我有一个非常简单的设置: 一切都发生在 GtkDrawingArea 的覆盖“绘制”方法中,该方法放置在滚动窗口的视口内。绘图区域大小为 1000000x1000000。它以绘图区域的中心为中心绘制一个 pixbuf:
cairo_set_source_surface(cr, pixbufSurface, xPos, yPos); // middle center
cairo_pattern_set_filter(cairo_get_source(cr), CAIRO_FILTER_FAST);
cairo_paint_with_alpha(cr, transp);
问题是我必须使用cairo_scale() 来简单地缩放绘制的pixbuf,同时仍将其保持在相同的位置,但它会将其移动得很远。缩放是通过scaleFactor 变量进行的。我怀疑我将不得不移动转换矩阵,并且我强制使用了一些值:
-
cairo_translate(cr, -500000, -500000);在 scaleFactor 为 2 时有效 -
cairo_translate(cr, -1500000, -1500000);在 scaleFactor 为 4 时有效
但我不知道这些数字是如何相互关联的。
【问题讨论】:
-
如果你的绘图区域是 1000000x1000000,并且你在中心,这是否意味着你在 500000x500000?如果然后以 2 倍进行缩放,则中间移动到 1000000x1000000 是有意义的。我猜你不是从中间向外扩展,而是从角落向外扩展。
-
是的,就是中心。你的意思是?我第一次以 2 倍缩放时,如果我转换为 -500000x-500000,它会起作用,但如果我第一次以 4 倍缩放,它会在我转换为 -1500000x-1500000 时起作用 不知道如何制定这个虽然
标签: c gtk scale transformation cairo