Allegro 5 - 使用alpha通道创建自定义位图

时间:2013-06-06 14:03:26

标签: c++ bitmap alpha allegro

下午大家,

我想知道是否有任何方法可以使用alpha通道创建自定义位图

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);

我确定我要么没有正确创建或绘制位图,所以我真的可以使用一些建议。

提前致谢, 亚历

2 个答案:

答案 0 :(得分:1)

您的代码段唯一不对的是:

al_map_rgba(0, 0, 0, 0.5)

应该是:

al_map_rgba_f(0, 0, 0, 0.5)

前一个范围是0到255之间的整数。

另外,请记住,Allegro的默认搅拌机是pre-multiplied alpha。因此,如果你想以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 :(得分:0)

设置

之后
al_set_blender(ALLEGRO_ADD, ALLEGRO_ALPHA, ALLEGRO_INVERSE_ALPHA);

它允许我绘制我的“保镖”位图并使用以下函数更改其alpha通道:

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

这之前没有用,所以我想添加al_set_blender解决了“错误”。

感谢您的帮助。