Gtk Windows unterstützt Transparenz mit Cairo. Ich habe versucht, einen Screenshot mit dem Code here zu bekommen. Aber es druckt reines Schwarz für Fenster, die Transparenz verwenden. Wie kann ich einen Screenshot (PNG) erstellen, der auch den Alphakanal abbildet?Wie bekomme ich einen PNG (Alpha Kanal) Screenshot von Gtk Fenster?
EDIT: Ich habe versucht mit Alpha Pixbuf, aber die Ausgabe ist immer noch ohne Alpha. Hier ist mein Code (singen Gtk #, aber es ist ziemlich identisch mit 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");
}
Hier ist der Ausgang:
EDIT: Ich habe es mit Kairo Oberfläche. Hier ist der Code, den ich verwenden:
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");
}
irgendwie schwer auf Ihrem Screenshot zu sehen, wenn das resultierende Bild alpha oder nicht hat ... – liberforce
Es hat schwarze Pixel, wo die Alpha sind. – blez
Vielen Dank für Ihre Lösung. Ich brauche eine einfache Möglichkeit, Screenshots von Bildschirmen (Multi-Monitore) zu erhalten Ich war begeistert, wenn Sie diese Lösung gefunden haben, um das zu tun? – Noitidart