使用gdk_pixbuf composite()的sprite map问题

时间:2014-10-30 02:17:54

标签: c gtk sprite gdk

我在尝试从精灵地图中删除精灵时遇到了问题。我可以 从左上角得到我的第一个精灵:

gdk_pixbuf_composite( sprite_src, sprite_buf,
                      0, 0, sprite_w, sprite_h,
                      0.0, 0.0, 1.0, 1.0,
                      GDK_INTERP_HYPER,
                      255 );

但是我无法得到第二个精灵,就在右边 第一个:

gdk_pixbuf_composite( sprite_src, sprite_buf2,
                      sprite_w, 0, sprite_w * 2, sprite_h,
                      0.0, 0.0, 1.0, 1.0,
                      GDK_INTERP_HYPER,
                      255 );

第一个看起来不错,但是我得到一个黑色矩形而且失败了 断言第二个:

GdkPixbuf-CRITICAL **: gdk_pixbuf_composite: assertion 'dest_x >= 0 &&
dest_x + dest_width <= dest->width' failed

我已经尝试了所有我能想到的东西。知道我做错了吗?

另外,我实际上并不需要进行任何缩放,但目前我还不能 找到另一种方法从精灵地图中删除精灵除了使用 gdk_pixbuf_composite()函数。还有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

我假设您的目标pixbuf只有sprite_w宽且精灵应该从0,0开始?在这种情况下,您还需要翻译,否则像素将被复制到与原始pixbuf中相同的位置。

但真正的解决方案可能是使用gdk_pixbuf_copy_area():它似乎更接近你需要的东西。

答案 1 :(得分:0)

我找到了gdk_pixbuf_new_subpixbuf,它正是我需要的,没有缩放,只是你的基本精灵砍刀功能:

gdk_pixbuf_new_subpixbuf( sprite_src, sprite_w, 0, sprite_w, sprite_h );