2

大家下午,

我想知道是否有任何方法可以创建带有 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);

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

提前致谢, 亚历克斯

4

2 回答 2

2

您的代码片段唯一有问题的是:

al_map_rgba(0, 0, 0, 0.5)

应该:

al_map_rgba_f(0, 0, 0, 0.5)

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

另外,请记住 Allegro 的默认搅拌器是 预乘 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)

但由于上述链接中提到的原因,这不是默认设置。

于 2013-06-07T11:43:22.487 回答
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 解决了“谜团”。

感谢你的帮助。

于 2013-06-07T21:47:41.597 回答