2016-10-08 3 views
1

어떻게 현재 창을 png와 같은 이미지 파일로 저장할 수 있습니까?gtk를 사용하여 이미지로 현재 창 저장하기 #

현재 창에서 gdkWindow를 얻을 수 있다는 것을 알고 있습니다. 이미지를 얻을 수도 있습니다. 이 이미지 구조체에서 각 픽셀을 쿼리 할 수도 있습니다. 그러나 내가 정말로 필요한 것은 pixbuf를 얻는 것입니다.

int width; 
int height; 
this.GetSize(width, height); 
this.GdkWindow.GetImage(0,0,width,height).? 

어떻게 GTK 창 또는 받을 GDK 창 또는 받을 GDK 이미지에서 pixbuf을받을 수 있나요?

int width; 
int height; 
this.GetSize(out width, out height); 
Pixbuf pixbuf = Pixbuf.FromDrawable (this.GdkWindow, this.Colormap, 0, 0, 0, 0, width, height); 
pixbuf.Save("/tmp/out.png","png"); 

편집은 좀 노력하고 있습니다. PNG가 올바른 크기로 내보내 지지만 흐리게 보입니다.

편집 2

해결책이 효과적입니다. bluriness입니다 당신이 파일을 사용 gdk_pixbuf_save에 저장하려면

+0

GTK + 2 또는 3을 사용하고 있습니까? – oldtechaa

+0

나는 gtk-sharp 버전이 2.12.0.0이므로 2라고 말할 것입니다. – frenchone

답변

0

사용 gdk_pixbuf_get_from_drawable 다음하는 GdkPixbufGdkWindow에서 얻을 그놈 이미지 뷰어의 버그이었다.

는 더 미래 지향적 방법이다 카이로에서는 cairo_paint와 이미지면에 복사, gdk_cairo_set_source_window에 그 전달, cairo_create에 결과를 전달 cairo_image_surface_create를 사용할 수 있으며, cairo_surface_write_to_png로 이미지를 작성합니다.

귀하의 질문은 this one과 유사합니다. 그러나 그 질문에 대한 대답은 효과가 없기 때문에, 내 대답이 당신의 질문에 대답한다면, 나는 다른 질문을이 속임수로 닫을 것입니다.

+1

'cairo_surface_write_to_png'를 호출하기 바로 전에 ['cairo_paint'] (https://www.cairographics.org/manual/cairo-cairo-t)를 호출하십시오. .html # cairo-paint)를 'cairo_t'에 추가하십시오. – Jason

+0

감사합니다. @ 제이슨. 나는이 대답을 테스트하지 않았으며 사실 GDK pixbufs 나 카이로 이미지 백엔드에 대한 경험이 없다는 것을 쉽게 인정할 것입니다. 나는 GTK와 카이로 워드 프로세서에 관한 모든 것을 알고있다. 너의 제안 된 전화가 조금 필요한 것 같지 않니? (좋은 물건 OP는 카이로를 사용하지 않았다 :)) – oldtechaa

관련 문제