【问题标题】:How to copy a GdkPixbuf with a transparent background over another GdkPixbuf如何将具有透明背景的 GdkPixbuf 复制到另一个 GdkPixbuf 上
【发布时间】:2021-02-14 18:59:54
【问题描述】:

在 C/C++ 中使用 GDK 时,我尝试将具有透明背景的 GdkPixbuf 复制到另一个 GdkPixbuf 上,gdk_pixbuf_copy_area() 说:

(scroll:6227): GdkPixbuf-CRITICAL **: 10:41:37.084: gdk_pixbuf_copy_area: assertion '!(gdk_pixbuf_get_has_alpha (src_pixbuf) && !gdk_pixbuf_get_has_alpha (dest_pixbuf))' 失败

如果 gdk_pixbuf_copy_area() 不会这样做,那我该怎么做呢?我想更改目标 GdkPixbuf,而不是显示或窗口或其他任何内容,因此覆盖和合成似乎不是答案。

谢谢。

【问题讨论】:

    标签: c alpha gdk pixmap


    【解决方案1】:

    看起来,您的目标 GdkPixbuf 没有 Alpha 通道,而您的源 GdkPixbuf 有。这是一个无效的组合。

    尝试使用

    向您的目标 Pixbuf 添加一个 Alpha 通道
    dest_alpha = gdk_pixbuf_add_alpha(dest, false, 0, 0, 0);
    

    在调用gdk_pixbuf_copy_area() 之前删除此断言。请注意,这将创建一个添加了 alpha 通道的新 pixbuf(参见手册页 gdk_pixbuf_add_alpha()

    【讨论】:

    • gdk_pixbuf_copy_area() 不再抱怨,但它忽略了源 GdkPixbuf 的透明背景。我的目标GdkPixbuf全黑,源GdkPixbuf的透明区域在目标GdkPixbuf上复制为白色。
    猜你喜欢
    • 1970-01-01
    • 2011-11-14
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 2018-09-19
    • 2017-03-29
    相关资源
    最近更新 更多