2016-10-08 14 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"); 

EDITはちょっと働いています。 PNGは正しいサイズでエクスポートされますが、ぼやけています。

EDIT 2

解決策が機能しています。 blurinessは、ファイルの使用gdk_pixbuf_saveに保存したい場合は、その後、GdkPixbufGdkWindowから取得するにはGNOMEの画像ビューア

+0

GTK + 2または3を使用していますか? – oldtechaa

+0

gtk-sharpバージョンが2.12.0.0であるので2と言うでしょう – frenchone

答えて

0

利用gdk_pixbuf_get_from_drawableのバグでした。

は、より将来性の方法であるカイロでは、あなたは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

ありがとう@Jason。私はこの回答を何もテストしなかったことを認め、GDK pixbufsやCairoのイメージバックエンドに関する経験はありません。私はちょうどGTKとカイロのドキュメントの周りに自分の道を知っているすべてです。あなたの提案されたコールはちょっと必要なのでしょうね? (良いことOPはカイロを使わなかった:)) – oldtechaa

関連する問題