Gtk窗口支持使用开罗的透明度。我试图获得代码here的屏幕截图。但是,它为使用透明度的窗口打印纯黑色。我怎样才能制作一个截图(PNG)的alpha通道也?如何获得Gtk窗口的PNG(alpha通道)截图?
编辑:我试着用alpha pixbuf,但输出仍然没有alpha。这里是我的代码(唱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");
}
有点难以看到您的屏幕截图,如果生成的图像有alpha或不... – liberforce 2012-03-28 17:02:27
它有黑色的像素,其中的alpha。 – blez 2012-03-28 17:04:07
感谢您分享您的解决方案。我需要一个简单的方法来获得屏幕截图(多显示器)如果你发现这个解决方案做到这一点,我很想知道它吗? – Noitidart 2015-05-08 11:13:23