gtk 中的 alpha 混合

发布于 2024-09-05 15:08:54 字数 224 浏览 5 评论 0原文

如何绘制半透明 基元作为 GTK 中的可绘制对象的填充多边形

现在是 2010 年了,我在 google 上找不到如何将 alpha 值放入颜色中。我缺少什么?

How can you draw semi-transparent primitives such as filled polygons to a Drawable in GTK?

Its 2010, and I google isn't finding how to put an alpha value into a colour for me. What am I missing?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

青芜 2024-09-12 15:08:54

使用 gtk.gdk.Drawable.cairo_create() 并对返回的 gtk.gdk.CairoContext 进行操作。请参阅文档。 Cairo 是一个通用的向量 2D 库,从许多版本之前就在 GTK+ 中使用; GDK 绘图基元已被弃用(尽管不是整个 GDK)。

Use gtk.gdk.Drawable.cairo_create() and operate on the returned gtk.gdk.CairoContext. See documentation. Cairo is a generic vector 2D library that is used in GTK+ since many versions ago; GDK drawing primitives are deprecated in its favor (though not the whole GDK).

静若繁花 2024-09-12 15:08:54

这是执行此操作的实际源代码。我只是想让整个 pixbuf 变灰,但要做一个形状,你只需要使用适当的路径方法:

def getBlendedPixbuf(pixbuf, (r,g,b,a)):
    """Turn a pixbuf into a blended version of the pixbuf by drawing a
    transparent alpha blend on it."""
    pixbuf = pixbuf.copy()
    #convert pixbuf to Drawable:
    visual = gtk.gdk.visual_get_best()
    screen = visual.get_screen()
    cmap = screen.get_default_colormap()

    w,h = pixbuf.get_width(), pixbuf.get_height()
    drawable = gtk.gdk.Pixmap(
        None, w, h, visual.depth)
    gc = drawable.new_gc()
    drawable.draw_pixbuf(
        gc, pixbuf, 0,0,0,0,-1,-1)

    #do all the drawing on it
    cc = drawable.cairo_create()
    cc.set_source_rgba(r,g,b,a)
    cc.paint()

    #put it back into a pixbhf
    pixbuf.get_from_drawable(
        drawable,cmap,0,0,0,0,w,h)
    return pixbuf

Here is actual source code to do it. I just wanted to gray out the entire pixbuf, but to do a shape you'd just have to use the appropriate path methods:

def getBlendedPixbuf(pixbuf, (r,g,b,a)):
    """Turn a pixbuf into a blended version of the pixbuf by drawing a
    transparent alpha blend on it."""
    pixbuf = pixbuf.copy()
    #convert pixbuf to Drawable:
    visual = gtk.gdk.visual_get_best()
    screen = visual.get_screen()
    cmap = screen.get_default_colormap()

    w,h = pixbuf.get_width(), pixbuf.get_height()
    drawable = gtk.gdk.Pixmap(
        None, w, h, visual.depth)
    gc = drawable.new_gc()
    drawable.draw_pixbuf(
        gc, pixbuf, 0,0,0,0,-1,-1)

    #do all the drawing on it
    cc = drawable.cairo_create()
    cc.set_source_rgba(r,g,b,a)
    cc.paint()

    #put it back into a pixbhf
    pixbuf.get_from_drawable(
        drawable,cmap,0,0,0,0,w,h)
    return pixbuf
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文