这似乎是鉴于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)

我不能为我的生活出了翻译虽然。有没有更简单的方法呢?我如何“最适合”的画布上开罗路径?

请要求澄清如果有什么是这个问题不清楚。

有帮助吗?

解决方案

我已发现一种解决方案,我喜欢(至少对于我的目的)。只是创建一个新的表面和油漆到新的一个旧的表面上。

其他提示

至于规模而已,我也做了类似的事情来调整图像在一个盒子里有“最适合”的做法。约规模,这里是代码:

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

图片被取用对齐到原点(左上在我的情况),所以也许类似的事情应该做翻译的路径。

另外,该最佳拟合是为了维持高宽比。如果要拉伸该图中,使用每个所述比率而不是“规模”可变的。

希望我已经帮助

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top