下午大家,
我想知道是否有任何方法可以使用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);
我确定我要么没有正确创建或绘制位图,所以我真的可以使用一些建议。
提前致谢, 亚历
答案 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解决了“错误”。
感谢您的帮助。