Всем полдня,
Мне было интересно, можно ли как-нибудь создать собственное растровое изображение с альфа-каналом?
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
Единственное, что не так с вашим фрагментом кода:
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)
но это не значение по умолчанию по причинам, указанным в приведенной выше ссылке.
после того, как я установил
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 решило «тайну».
Спасибо за вашу помощь.