2015-07-10 47 views
3

我正在努力繪製一個圓形矩形PNG背景。每當我嘗試繪製一個圓時,它會根據我的圖像的比例展開 - 使其成爲橢圓形而不是圓形。Pycairo縮放失真

這裏是設置:

#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 

我特別感謝任何關於如何解決系統性縮放問題的建議,但是我也希望能夠就如何在現有設置的範圍內繪製一個圓圈提出建議。

非常感謝。

回答

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或規模,如果這是你喜歡什麼)做任何定標。