Allegro 5 — создание собственного растрового изображения с альфа-каналом

Всем полдня,

Мне было интересно, можно ли как-нибудь создать собственное растровое изображение с альфа-каналом?

bitmap = al_create_bitmap(30, 30);
al_set_target_bitmap(bitmap);
al_clear_to_color(al_map_rgb(255,255,255));
....
al_draw_tinted_bitmap(bitmap, al_map_rgba(0, 0, 0, 0.5),  X,  Y, 0);

Я уверен, что я либо не создаю, ни рисую растровое изображение правильно, поэтому я мог бы действительно использовать некоторые советы.

Заранее спасибо,
Alex

2

Решение

Единственное, что не так с вашим фрагментом кода:

al_map_rgba(0, 0, 0, 0.5)

должно быть:

al_map_rgba_f(0, 0, 0, 0.5)

Первый диапазон представляет собой целое число от 0 до 255.

Также имейте в виду, что блендер Allegro по умолчанию предварительно умноженная альфа. Так что, если вы хотите подкрасить красный на 50%, вы должны использовать:

float a = 0.5;
... al_map_rgba_f(1.0 * a, 0.0 * a, 0.0 * a, a) ...

Если вы не думаете об этом, вы, вероятно, предполагаете, что это интерполяция. то есть, более интуитивный блендер для большинства людей выглядит так:

al_set_blender(ALLEGRO_ADD, ALLEGRO_ALPHA, ALLEGRO_INVERSE_ALPHA)

но это не значение по умолчанию по причинам, указанным в приведенной выше ссылке.

1

Другие решения

после того, как я установил

al_set_blender(ALLEGRO_ADD, ALLEGRO_ALPHA, ALLEGRO_INVERSE_ALPHA);

это позволило мне нарисовать мое растровое изображение «bouncer» и изменить его альфа-канал, используя следующую функцию:

al_draw_tinted_bitmap(bouncer, al_map_rgba_f(1, 1, 1, alpha) 40, 0, 0);

Раньше это не работало, поэтому я думаю, что добавление al_set_blender решило «тайну».

Спасибо за вашу помощь.

0

По вопросам рекламы [email protected]