【问题标题】:Pycairo scale distortionPycairo 比例失真
【发布时间】:2015-07-10 21:16:40
【问题描述】:

我正在努力在矩形 png 背景上画一个圆圈。每当我尝试画一个圆时,它都会根据我的图像比例进行拉伸——使它变成一个椭圆而不是一个圆。

设置如下:

#set background image
surface = cairo.ImageSurface.create_from_png (image)
context = cairo.Context (surface)

WIDTH = cairo.ImageSurface.get_width(surface)
HEIGHT = cairo.ImageSurface.get_height(surface)
context.scale (WIDTH, HEIGHT)

这里是画圆函数,(x坐标,y坐标,半径,颜色值)和用于定位的函数:

def draw_node(cx,cy,r, rgb):
  context.arc(x_scale(cx), y_scale(cy), r, 0, 2 * math.pi)
  context.set_source_rgb(rgb[0]/255.0,rgb[1]/255.0,rgb[2]/255.0)
  context.fill()
  context.stroke()

def x_scale (x):
  width = 1000.0
  return (x + .5) / width

def y_scale (y):
  height = 1000.0 * HEIGHT / WIDTH
  return (y + .5) / height

我特别感谢有关如何解决系统缩放问题的任何建议,但我也希望获得有关如何在现有设置范围内绘制圆圈的建议。

非常感谢。

【问题讨论】:

    标签: python scale cairo scaletransform pycairo


    【解决方案1】:

    可能无法避免context.arc 在缩放不对称时绘制椭圆。使用您的 x_scale (x) 函数,您只需将圆心缩放到它应该在的位置。

    作为一种解决方法,我建议将两个方向缩放相同的数量;因此牺牲x_maxy_max 都将等于1

    我会更改您的代码:

    context.scale(HEIGHT, HEIGHT)
    print('surface = 1 x {:1.2f}'.format(WIDTH/HEIGHT))
    
    def draw_node(cx,cy,r, rgb):
      context.arc(cx, cy, r, 0, 2 * math.pi)
      context.set_source_rgb(rgb[0]/255.0,rgb[1]/255.0,rgb[2]/255.0)
      context.fill()
      context.stroke()
    

    不要进行任何缩放(如果您愿意,也可以按 1000 缩放)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      • 2010-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-27
      相关资源
      最近更新 更多