我怎样才能“最适合”任意的开罗(pycairo)路径?

时间:2010-02-18 21:23:31

标签: graphics cairo pycairo

似乎给出了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路径?

如果在这个问题中有任何不清楚的地方,请询问澄清。

2 个答案:

答案 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

图像被绘制为与原点对齐(在我的情况下是左上角),所以也许应该做一些类似的事情来翻译路径。

此外,这种最佳配合旨在保持纵横比。如果要拉伸图形,请使用每个比率而不是“比例”变量。

希望我帮助过