GTC окна поддерживают прозрачность с помощью Cairo. Я попытался получить скриншот с кодом здесь . Но он печатает чисто черный для окон, которые используют прозрачность. Как сделать снимок экрана (PNG), который также захватывает альфа-канал?
РЕДАКТИРОВАТЬ: я пытался с альфа 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");
}
Вот вывод:
![enter image description here](https://i.stack.imgur.com/67OXx.jpg)
РЕДАКТИРОВАТЬ: Я сделал это с поверхности Каира. Вот код, который я использовал:
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");
}