0
これは以前の質問の繰り返しですが、明確化されています。 私は前に答えが得られていないので、新しい簡潔な質問で にそれを再度尋ねる方がよいと思いました。階層化pyCairo pyGTK画像を保存する方法
透明なウィンドウの生成に成功しました。 ウィンドウ内に赤い円の半透明のオーバーレイ画像を生成するのに成功しました。 赤い円の中に小さな黒い四角の不透明なオーバーレイ画像を生成するのに成功しました。 ウィンドウに表示されているものをPNGファイルに保存するにはどうすればいいですか? 私はstackoverflow、nullege、googleを検索して成功していません。
以下のコードの最後の2行は、失敗した保存を示しています。 どのコードを使って、これを置き換えて、画面に表示されているものを含む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)
ありがとうございます。それがトリックでした。 – jlettvin
私は間違いをこれを修正する間違いを修正しました。半透明で不透明なマークアップは表示されますが、下のウィンドウからの背景は表示されません。マークアップは背景を飾ることを目的としているので、背景を紛失すると結果がほとんど役に立たなくなります。それを捕らえるための追加のステップはありますか? – jlettvin