调整set_line_width()以纠正比率?

时间:2014-10-03 05:26:26

标签: graphics cairo

我用开罗画数字。我发现开罗使用的是绝对坐标#34;画画的时候。除了指定line_width之外,它是一种灵活而舒适的方式。因为下面图像的比例不是1:1,当"绝对坐标"转换为"实际坐标",线条的宽度不相同。

WIDTH = 960
HEIGHT = 640

surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, WIDTH, HEIGHT)
ctx = cairo.Context(surface)
ctx.scale(WIDTH, HEIGHT)

ctx.rectangle(0, 0, 1, 1)
ctx.set_source_rgb(255, 255, 255)
ctx.fill()

ctx.set_source_rgb(0, 0, 0)
ctx.move_to(0.5, 0)
ctx.line_to(0.5, 1)
ctx.move_to(0, 0.5)
ctx.line_to(1, 0.5)
ctx.set_line_width(0.01)

ctx.stroke()

在输出图像中将line_width显示为相同比例的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

在致电ctx.scale()之前撤消对stroke()的来电,例如通过:

ctx.save()
ctx.set_line_width(2)
ctx.identity_matrix()
ctx.restore()

(之后save() / restore()对再次应用所有转换)