Gtkのウィンドウは、カイロを使用して透過性をサポートしています。コードhereでスクリーンショットを取得しようとしました。しかし、透過性を使用するウィンドウでは純粋な黒が印刷されます。どのようにしてアルファチャンネルをあわせるスクリーンショット(PNG)を作ることができますか?GtkウィンドウのPNG(アルファチャンネル)スクリーンショットを取得するには?
編集:私はalpha pixbufで試しましたが、出力はまだアルファなしです。ここに私のコードは(のGtk#を歌う、それはCとかなり同じです)です:
static void GetScreenshot(Gtk.Window win) {
var pixbuf = new Gdk.Pixbuf(Gdk.Colorspace.Rgb, true, 8, 500, 500);
var pix = pixbuf.GetFromDrawable(win.GdkWindow, win.Colormap, 0, 0, 0, 0, 500, 500);
pix.Save("/home/blez/Desktop/screenshot.png", "png");
}
ここでは出力です:
編集:私は、カイロの面でそれをやりました。
static void GetScreenshot(Gtk.Window win) {
var src_context = Gdk.CairoHelper.Create(win.GdkWindow);
var src_surface = src_context.Target;
var dst_surface = new Cairo.ImageSurface(Cairo.Format.ARGB32, win.Allocation.Width, win.Allocation.Height);
var dst_context = new Cairo.Context(dst_surface);
dst_context.SetSourceSurface(src_surface, 0, 0);
dst_context.Paint();
dst_surface.WriteToPng("screenshot.png");
}
結果の画像にアルファが含まれているかどうかを確認することが難しいです。 – liberforce
アルファがある場所に黒いピクセルがあります。 – blez
あなたのソリューションを共有してくれてありがとう。私はあなたがこの解決策を見つけたら私が勝ったスクリーン(マルチモニター)のスクリーンショットを取得する簡単な方法を必要としていますか? – Noitidart