RLE 精灵



因为位图能够以很多方式运用, 位图的数据结构也就非常的复杂了, 并且包含了许多的数据. 然而在许多情况下, 你将发现你自己储存的图片仅仅只是需要复制到屏幕上, 而不是用来做填充图案等. 如果是这样, 你最好将你的图片储存为 RLE_SPRIT 或 COMPILED_SPRITE 结构而不是常规位图.

RLE 精灵以一个简单的运行行编码格式储存图片, 在这种格式里 重复的零点用一个长度统计数来表示, 非零点串由计数器给出长度. RLE 精灵通常比普通的位图小的多, 即因为行压缩, 又因为避免了许多无用的位图数据结构. 它们经常比普通位图要工作的快, 因为它不用比较每个点是否是零来决定 是否应该画出来, 一个 add 就可能忽略掉整段零, 而且可以用快速的串操作复制一大段非零的点.


然而, 任何玉都有瑕疵, 由于 RLE 精灵 缺少柔韧性. 你不能再在上面作画, 不能翻折,旋转,或拉伸 它们. 事实上你唯一能做的是 使用 draw_rle_sprite() 函数将它画在位图上, 就相当于使用 draw_sprite() 画一个常规的位图. 你可以在 运行时将位图转换成 RLE 精灵, 你也可以在 grabber 数据文件中 选 'RLE' 按纽建立位图来创建 RLE 精灵.

RLE_SPRITE *get_rle_sprite(BITMAP *bitmap);
以指定的位图为基础来创建一个 RLE 精灵 (必须是 内存位图).

void destroy_rle_sprite(RLE_SPRITE *sprite);
撤销一个由先前 get_rle_sprite() 创建的 RLE 精灵结构.

void draw_rle_sprite(BITMAP *bmp, RLE_SPRITE *sprite, int x, int y);
将一个 RLE 精灵画在位图的指定位置.

void draw_trans_rle_sprite(BITMAP *bmp, RLE_SPRITE *sprite, int x, int y);
draw_rle_sprite() 的半透明版本. 描述见 draw_trans_sprite(). 这个只能使用在你设置了 色彩映射表 ( 256 色模式) 或混合表 (真彩模式) 以后.


void draw_lit_rle_sprite(BITMAP *bmp, RLE_SPRITE *sprite, int x, y, color);
draw_rle_sprite() 的淡化(Tint) 版本. 描述见 draw_lit_sprite(). 这个只能使用在你设置了 色彩映射表 ( 256 色模式) 或混合表 (真彩模式) 以后.




返回