【问题标题】:How to save layered pyCairo pyGTK image如何保存分层的pyCairo pyGTK图像
【发布时间】:2012-05-01 20:55:08
【问题描述】:

这有点重复之前的问题,但已澄清。 由于之前没有得到答案,我想最好重新问一下 在一个新的更简洁的问题中。

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

【问题讨论】:

    标签: python pygtk pycairo


    【解决方案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
    

    【讨论】:

    • 我错误地宣布此问题已修复。出现半透明和不透明的标记,但不显示下方窗口的背景。由于标记旨在装饰背景,因此缺少背景会使结果几乎毫无用处。是否还有其他步骤可以捕捉到这一点?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    • 2016-04-08
    • 2011-06-20
    • 2011-11-01
    • 2015-06-28
    相关资源
    最近更新 更多