문제

PIL과 함께 pygtk를 사용하고 있습니다.나는 이미 PIL을 변환하는 방법을 알아냈습니다. Image~에게 gtk.gdk.Pixbuf에스.pixbuf를 표시하기 위해 내가 하는 일은 gtk.gdk.Image, 그런 다음 사용 img.set_from_pixbuf.이제 이 이미지에 몇 개의 선을 그리고 싶습니다.분명히 나는 Drawable 하기 위해서.문서를 살펴보기 시작했지만 이미 8-10개의 창이 열려 있고 전혀 간단하지 않습니다.

그렇다면 내 그림을 나타내는 Drawable을 얻고 거기에 몇 가지를 그린 다음 이를 그림으로 바꾸려면 어떤 마법을 입력해야 합니까? gdk.Image 그러면 내 앱에 표시할 수 있나요?

도움이 되었습니까?

해결책

비슷한 작업(gdk.Drawable에 그리기)을 하고 있었는데 set_foreground가 작동하지 않는 것을 발견했습니다.실제로 원하는 색상을 사용하여 그리려면 다음을 사용했습니다.

# Red!
gc.set_rgb_fg_color(gtk.gdk.Color(0xff, 0x0, 0x0))

다른 팁

맙소사.너무 고통스럽습니다.여기있어:

    w,h = pixbuf.get_width(), pixbuf.get_height()
    drawable = gtk.gdk.Pixmap(None, w, h, 24)
    gc = drawable.new_gc()
    drawable.draw_pixbuf(gc, pixbuf, 0, 0, 0, 0, -1, -1)

    #---ACTUAL DRAWING CODE---
    gc.set_foreground(gtk.gdk.Color(65535, 0, 0))
    drawable.draw_line(gc, 0, 0, w, h)
    #-------------------------

    cmap = gtk.gdk.Colormap(gtk.gdk.visual_get_best(), False)
    pixbuf.get_from_drawable(drawable, cmap, 0, 0, 0, 0, w, h)

실제로는 빨간색 선이 아닌 검은색 선 ATM을 그려서 해야할 일이 남아있는데...

카이로 컨텍스트를 사용해 보셨나요?죄송합니다. 귀하의 게시물에 댓글을 달 수 없는 것 같습니다.그래서 여기에 게시했습니다.

나는 이것을 직접 시도하지는 않았지만 gtk로 그림을 그리는 데 있어서는 카이로가 당신의 친구라고 믿습니다.카이로 컨텍스트의 소스를 pixbuf로 설정할 수 있으므로 이것이 유용하다고 생각합니다.

gdkcairo컨텍스트

image = gtk.Image()
pixmap,mask = pixbuf.render_pixmap_and_mask() # Function call
cm = pixmap.get_colormap()
red = cm.alloc_color('red')
gc = pixmap.new_gc(foreground=red)
pixmap.draw_line(gc,0,0,w,h)
image.set_from_pixmap(pixmap,mask)

트릭을 수행해야합니다.

에 연결해야 합니다. expose-event (GTK 2) 또는 draw (GTK 3) 신호.해당 핸들러에서 간단히 사용하십시오. image.window 위젯을 얻으려면 gtk.gdk.Window;이것은 하위 클래스입니다 gtk.gdk.Drawable, 그래서 그림을 그릴 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top