首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pycairo尺度失真

Pycairo尺度失真
EN

Stack Overflow用户
提问于 2015-07-11 05:16:40
回答 1查看 343关注 0票数 3

每当我试图画一个圆时,它都会根据我的图像的比例进行拉伸--使它成为椭圆而不是圆。

下面是设置:

代码语言:javascript
运行
复制
#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坐标,半径,颜色值)和用于定位的函数:

代码语言:javascript
运行
复制
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

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

非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2015-07-11 06:23:19

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

作为一种变通办法,我建议将两个方向都按相同的量进行缩放;因此,要牺牲x_maxy_max都等于1

我会修改你的代码:

代码语言:javascript
运行
复制
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缩放)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31350409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档