0

这是对先前问题的重复,但已澄清。由于我之前没有得到答案,我认为最好在一个新的、更简洁的问题中重新提问。

我成功生成了一个透明窗口。我成功地在窗口内生成了一个红色圆圈的半透明叠加图像。我成功地生成了红色圆圈内的小黑色方块的不透明叠加图像。如何将我在窗口中看到的内容保存到 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)
4

1 回答 1

1

看起来您正在渲染图像表面,其中没有任何内容。相反,您应该渲染窗口上下文的表面,这是您进行绘图的地方。试试这个:

surface = cr.get_group_target() # get the surface being drawn to the window via your context
surface.write_to_png(png) # write the surface to a file
于 2012-05-01T21:21:48.033 回答