2012-11-03 2 views
3

그래서 PyCairo을 사용하여 이미지를 그립니다. 효율성은 매우 중요하지만 PyGtk의 gtk.gdk.Pixbuf를 사용하여 이미지를로드하고 있습니다. 내 질문에, Pixbuf를 카이로 컨텍스트를 gtk.gdk.CairoContext를 통해 검색하면 Pixbuf를 렌더링하는 데 성능 차이가 있습니까? Pixbuf를 cairo.ImageSurface 개체로 변환하고 비교하면 큰 차이가 있습니까? 이 작업은 초당 30 번 업데이트되는 별도의 드로잉 스레드에서 실행됩니다 (이미지를 업데이트해야하는 경우에만 가능). 변환은 한 번만 실행됩니다.카이로에서 GTK Pixbufs 그리기의 효율성

cr.set_source(imgSurface) 
cr.rectangle(0, 0, imgSurface.get_width(), imgSurface.get_height()) 
cr.fill() 
+1

pixbuf를 어떻게 카이로 이미지 이미지로 변환 하시겠습니까? set_source_pixbuf()도 필요하지 않습니까? –

답변

3

gdkcr = gtk.gdk.CairoContext(cr) 

gdkcr.set_source_pixbuf(img, 0, 0) 
gdkcr.paint() 

@UliSchlachter 부탁으로, 당신은 어떻게 당신의 두 번째 솔루션에 ImageSurface을받을 수 있나요? 나는 그것이 단지 .set_source_pixbuf().get_source().get_surface()을 포함한다고 추측 할 수 있습니다.

pixbuf와 cairo가 메모리에있는 픽셀을 저장하는 방식이 같지 않습니다 (RGB (A) vs. ARGB). 그래서 set_source_pixbuf()는 픽셀을 픽셀 단위로 복사하면서 비트를 섞습니다. 이것은 비교적 빠르지 만 여전히 비용이 듭니다. 이미지가 항상 동일하면 루프 외부에서 한 번만 변환을 수행해야합니다.