似乎给出了stroke_extents()
以及translate(x, y)
和scale(x, y)
函数中的信息,我应该能够采用任意的开罗(我使用的是pycairo)路径和“最好的”适合“它。换句话说,将其居中并展开以填充可用空间。
在绘制路径之前,我缩放了画布,使得原点是左下角,向上是y +,右边是x +,高度和宽度都是1.鉴于这些条件,此代码似乎正确缩放路径:
# cr is the canvas
extents = cr.stroke_extents()
x_size = abs(extents[0]) + abs(extents[2])
y_size = abs(extents[1]) + abs(extents[3])
cr.scale(1.0 / x_size, 1.0 / y_size)
我不能为我的生活弄清楚翻译。有更简单的方法吗?我怎样才能在画布上“最适合”cairo路径?
如果在这个问题中有任何不清楚的地方,请询问澄清。
答案 0 :(得分:2)
我找到了一个我喜欢的解决方案(至少对我而言)。只需创建一个新曲面并将旧曲面绘制到新曲面上。
答案 1 :(得分:0)
至于比例尺,我做了类似的事情,用“最合适”的方法调整盒子里面的图像。关于比例,这是代码:
available_width = 800
available_height = 600
path_width = 500
figure_height = 700
# formulas
width_ratio = float(available_width)/path_width
height_ratio = float(available_height)/figure_height
scale = min(height_ratio, width_ratio)
# result
new_path_width = path_width*scale
new_figure_height = figure_height*scale
print new_path_width, new_figure_height
图像被绘制为与原点对齐(在我的情况下是左上角),所以也许应该做一些类似的事情来翻译路径。
此外,这种最佳配合旨在保持纵横比。如果要拉伸图形,请使用每个比率而不是“比例”变量。
希望我帮助过