这是对先前问题的重复,但已澄清。由于我之前没有得到答案,我认为最好在一个新的、更简洁的问题中重新提问。
我成功生成了一个透明窗口。我成功地在窗口内生成了一个红色圆圈的半透明叠加图像。我成功地生成了红色圆圈内的小黑色方块的不透明叠加图像。如何将我在窗口中看到的内容保存到 PNG 文件中。我已经搜索了 stackoverflow、nullege 和 google,但没有成功。
下面代码的最后两行显示了我的失败保存。我可以用什么代码替换它以查看包含我在屏幕上看到的内容的 PNG。
import pygtk
pygtk.require('2.0')
import gtk, cairo
from math import pi
# Window setup
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.set_decorated(True)
window.set_app_paintable(True)
window.set_colormap(window.get_screen().get_rgba_colormap())
window.realize()
window.show()
window.set_flags(gtk.HAS_FOCUS | gtk.CAN_FOCUS)
window.grab_focus()
# Cairo transparent setup
cr = widget.window.cairo_create()
cr.set_operator(cairo.OPERATOR_CLEAR)
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 201, 201)
cr.rectangle(0, 0, 201, 201)
cr.fill()
# Cairo semi-transparent setup
cr.set_operator(cairo.OPERATOR_OVER)
cr.set_source_rgba(0.5, 0.0, 0.0, 0.5)
cr.arc(100, 100, 100, 0, pi*2)
cr.fill()
# Cairo opaque setup
cr.set_operator(cairo.OPERATOR_OVER)
width = 3
r, g, b, a = (0.0,0.0,0.0,1.0)
cr.set_source_rgba(r,g,b,a)
cr.rectangle(-1, -1, 3, 3)
cr.fill()
# Restore default Cairo conditions
cr.set_operator(cairo.OPERATOR_OVER)
# Save layered image to a png image file
with open('layered.png', 'w+') as png:
surface.write_to_png(png)