1
我想優化我的開羅繪圖。我在開羅圖形繪製的頂部有一個不變的背景。對於類的每個實例,背景可以不同,因此它不能是靜態文件。爲了繪製背景,我願做這樣的事情:如何創建內存映像
if self.pixbuf is None:
self.pixbuf = self.draw_background(cr, width, height)
#self.pixbuf = gtk.gdk.pixbuf_new_from_file("/path/to/file.png")
cr.set_source_pixbuf(self.pixbuf, 0, 0)
cr.paint()
所以,我只創建背景一次,然後將其顯示爲圖像,並在它上面畫的東西。這是爲了節省時間,而不是在每次別人改變時重新繪製整個不變的背景。註釋掉的代碼行工作正常,但我真的不想創建一個PNG,將其保存到臨時文件,然後加載該文件。這似乎是IO的浪費。
我嘗試這樣做:
self draw_background (self, cr, width, height)
pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, True, 8, int(width), int(height))
cr.set_source_color(gtk.gdk.color_parse('black'))
cr.set_line_width(2)
cr.rectangle(0, 0, width, height)
cr.stroke()
cr.paint()
return pixbuf
但不顯示背景。
我在做什麼錯?
不應該draw_background()函數繪製到它創建的新pixbuf嗎?您粘貼的代碼會創建一個新的pixbuf,但不會爲其繪製任何內容。換句話說:它不應該有cr參數,而應該爲新的pixbuf創建一個cairo上下文。這有多幫助? – 2013-02-23 10:43:55
@UliSchlachter:雖然可能的確如此,但我不知道該怎麼做......我通過Google搜索找到的大多數函數都會返回'gtk.gdk.pixbuf_get_from_surface',它不會出現在我的系統上(pygtk v2.24)。你有一段代碼,我可以看看嗎? – Sardathrion 2013-02-25 08:11:51
我不明白你的第一個代碼片段中的「其他」。第一次創建像素圖時,這不會使它不會將背景繪製到控件上嗎? – Ancurio 2013-03-01 10:57:38