【发布时间】:2012-03-28 00:53:03
【问题描述】:
Gtk 窗口支持使用 Cairo 的透明度。我试图用代码here 截屏。但是对于使用透明度的窗口,它会打印纯黑色。如何制作同时捕获 Alpha 通道的屏幕截图 (PNG)?
编辑:我尝试使用 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 或没有 alpha,在您的屏幕截图中很难看到...
-
它在 alpha 所在的位置有黑色像素。
-
感谢分享您的解决方案。我需要一种简单的方法来获取屏幕截图(多显示器)我很想知道你是否找到了这个解决方案来做到这一点?
标签: mono gtk pygtk cairo pycairo