Проблемы с картой спрайтов при использовании gdk_pixbuf_composite()

У меня проблемы с удалением спрайтов из карты спрайтов. Я могу получить свой первый спрайт из верхнего левого угла следующим образом:

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(). Есть ли способ лучше?


person gdonald    schedule 30.10.2014    source источник


Ответы (2)


Я предполагаю, что ваш целевой pixbuf имеет ширину всего sprite_w, а спрайт должен начинаться с 0,0? В этом случае вам также необходимо перевести, иначе пиксели будут скопированы в то же место, что и в исходном pixbuf.

Но реальное решение, вероятно, состоит в использовании gdk_pixbuf_copy_area(): кажется, это намного ближе к тому, что вам нужно.

person Jussi Kukkonen    schedule 31.10.2014

Я нашел gdk_pixbuf_new_subpixbuf, это было именно то, что мне нужно, без масштабирования, просто ваша базовая функция измельчения спрайтов:

gdk_pixbuf_new_subpixbuf( sprite_src, sprite_w, 0, sprite_w, sprite_h );
person gdonald    schedule 31.10.2014