所有的这些例程都将被目标位图的剪裁矩形所影响.
void clear(bitmap);
将位图全部清为颜色 0.
void clear_to_color(BITMAP *bitmap, int color);
用指定的颜色清位图.
void blit(BITMAP *source, BITMAP *dest, int source_x, int source_y,
int dest_x, int dest_y, int width, int height);
从源位图复制一个矩形区域到目标位图.
参数 source_x 和 source_y 是将复制的源位图上的部分的左上角,
dest_x 和 dest_y 是
目标位图上的坐标. 这个例程将考虑
目标位图的剪裁矩形, 如果你试图复制一个源位图外的区域同样也将做剪裁处理.
你可以在任两个位图间复制, 甚至是两个重叠的内存位图
(即, 来源和目标是相同的, 或者一个是另一个的子位图).
然而,你应当注意的是,许多 SVGA 卡不提供
分开的读写窗, 这就是说从屏幕的一个部分复制到另一部分时
需要使用一个在内存里的临时位图,
这样将极其的慢. 因此一个普遍的规则是
你应当避免在 SVGA 模式下的屏幕本身的复制.
另一方面,在 mode-X 下, 从屏幕的一个部分复制到另一部分 可以比从内存到屏幕的复制出奇的快, 只要源部分和目标部分正确的对齐. 在重叠的屏幕矩形间复制很慢,但是如果 区域不重叠, 而且它们有相同的面位置(plane alignment) (即: (source_x%4) == (dest_x%4)), VGA 门锁(latch)寄存器可以被用来做 很快的数据传输. 为了得到这个优势, 在 mode-X 下经常值得在 显存的隐藏区域储存砖块图片(使用一个大的 虚拟屏幕), 然后再将它们复制到可显的屏幕上.
如果 gfx_capabilite 标志的 GFX_HW_VRAM_BLIT 位被设置,
当前的驱动程序支持从屏幕的一部分 blit 到另一部分的硬件加速.
这极其的快, 因此当这个标志被设置了,
将你最常用的图形放才显存的屏幕以外的位置是很有价值的.
不象所有的图形例程, blit() 允许源位图和目标
位图有不同的颜色深度, 所以它可以被用来
在两种点格式之间转换.
void masked_blit(BITMAP *source, BITMAP *dest, int source_x, int source_y,
int dest_x, int dest_y, int width, int height);
象 blit() 那样, 但是忽略透明点 ( 在 256 色模式下是 0,
真彩数据里是亮点). 源图片必须是内存位图或它的子位图,
并且源图和目标图区域绝对不能重叠.
当 gfx_capabilite 的 GFX_HW_VRAM_BLIT_MASKED 位被设置, 当前的驱动程序支持从屏幕的一部分到另一部分的掩式 blit 硬件加速. 这极其的快, 因此当这个标志被设置了, 将你最常用的图形放才显存的屏幕以外的位置是很有价值的.
警告: 如果硬件加速标志没有被设置, masked_blit()
在源图是显存位图时将工作不正常,
输入图形必须永远是内存位图!
void stretch_blit(BITMAP *source, BITMAP *dest,
int source_x, source_y, source_width, source_height,
int dest_x, dest_y, dest_width, dest_height);
象 blit() 那样, 不过它还可以调整图片的比例因此源图和目标图
可以有不同的大小.这个例程没有象常规的复制
那样做常规的安全检查: 你必须特别小心
不要复制源图以外的区域, 而且你不能
在重叠区域间复制, 即你必须将源图和目标图使用不同的位图.
同样, 源图必须是内存位图或它的子位图,
不能是硬件屏幕.
void draw_sprite(BITMAP *bmp, BITMAP *sprite, int x, int y);
画一个精灵位图到目标位图的
指定位置.这完全和 blit(sprite, bmp, 0, 0, x,
y, sprite->w, sprite->h) 相同, 但是它使用了掩式绘图模式, 透明
点被忽略,
因此背景图片将透过精灵被显示. 透明点在 256 色模式下是 0,
在真彩数据中是亮粉红点 (红值蓝值最大,
绿值为零).
如果 gfx_capability 标志里的 GFX_HW_VRAM_BLIT_MASKED 位被设置, 当源图是显存位图或屏幕子位图时, 当前驱动程序支持硬件加速.
这及其的快, 因此如果这个标志被设置, 你才显存中屏幕以外的位置存放些极其常用的精灵将很有价值.
警告: 如果硬件加速标志没有被设置, draw_sprite()
在使用显存位图做源位图时将工作不正常,
输入图形必须总是内存位图!
虽然一般不支持混合颜色深度图形, 但 由于特殊的原因, 这个函数能用来将 256 色源图画在 真彩目标图上, 因此你可以在真彩程序里的指定精灵上使用调色板效果.
void draw_sprite_v_flip(BITMAP *bmp, BITMAP *sprite, int x, int y);
void draw_sprite_h_flip(BITMAP *bmp, BITMAP *sprite, int x, int y);
void draw_sprite_vh_flip(BITMAP *bmp, BITMAP *sprite, int x, int y);
这些象 draw_sprite(), 但是它们翻折图片,可以是纵向的,
横向的, 对角线的轴变换. 这个产生了精确的镜像图片, 但它和
旋转精灵不同 (它比旋转例程要快的多).
精灵必须是内存位图.
void draw_trans_sprite(BITMAP *bmp, BITMAP *sprite, int x, int y);
使用一个全局色彩映射表或真彩色混合函数来将一个
精灵覆盖在存在的图片上面. 这个必须在你
已经设置了颜色映射表 ( 256 色模式) 或混合映射表
(真彩模式) 后才能使用. 因为它在写图时还牵扯了读操作,
如果你直接向显存画半透明效果,将非常的慢,
因此无论何地有可能的话你都应当使用内存位图来代替屏幕位图.
void draw_lit_sprite(BITMAP *bmp, BITMAP *sprite, int x, int y, int color);
使用全局色彩映射表向指定色彩或亮度级过度精灵图片,
将算出的图片画到目标位图上.
这个必须在你设置了颜色映射表
(256 色模式) 或 混合映射表(真彩模式) 后才能使用.
void draw_gouraud_sprite(BITMAP *bmp, BITMAP *sprite, int x, int y,
int c1, int c2, int c3, int c4);
将精灵向指定的颜色或光度过度, 从四角颜色添入图形的表面.
这必须在
你已经设置了颜色映射表 ( 256 色模式)
或混合映射表 (真彩模式) 后才能使用.
void draw_character(BITMAP *bmp, BITMAP *sprite, int x, int y, int color);
将精灵位图画在位图的指定
位置上, 将透明点以当前文字模式画
(如果文字模式是 -1 则忽略, 否则以文字背景颜色画),
并且将所有其它的点画成指定的颜色.
透明点为 256 色模式下的零或
真彩数据中的亮粉红 ( 红蓝值最大, 绿值为零). 精灵必须是
8 位图片, 即使目标位图是真彩位图.
void rotate_sprite(BITMAP *bmp, BITMAP *sprite, int x, int y, fixed angle);
旋转位图一个指定的角度,将它画在位图的指定位置.
角度是一个 16.16 的定点数. 这个定点数和
定点数三角例程中的一样, 256 等于
整圈, 64 是直角, 等等. 精灵必须是内存位图.
void rotate_scaled_sprite(BITMAP *bmp, BITMAP *sprite, int x, int y,
fixed angle, fixed scale);
象 rotate_sprite() 相同, 但是在旋转的同时还做拉扯或压缩的操作.
void stretch_sprite(BITMAP *bmp, BITMAP *sprite, int x, int y, int w, int h);
将精灵图片画在位图的指定位置,
拉扯它到指定的宽度和高度.
stretch_sprite() 和 stretch_blit() 的不同之处在于 stretch_sprite() 去掉
了透明点, 在 256 色模式下是 0, 真彩数据中的亮粉红色
(红和蓝值为最大, 绿值为 0).