#include "Conio.h"#include "graphics.h"#define closegr closegraphstruct ChineseLib /* 汉字字模数据结构 */{ unsigned char index[3]; /* 汉字内码索引 */ unsigned char data[32]; /* 点阵码数据 */};struct ChineseLib hz[]={ /* 以下是 '宋' 的 16点阵宋体 字模,32 byte */ "宋" , 0x02,0x00,0x01,0x00,0x7F,0xFE,0x41,0x04, 0x81,0x08,0x01,0x00,0x7F,0xFC,0x03,0x80, 0x05,0x80,0x05,0x40,0x09,0x20,0x11,0x10, 0x21,0x0E,0x41,0x04,0x01,0x00,0x00,0x00, /* 以下是 '体' 的 16点阵宋体 字模,32 byte */ "体", 0x10,0x40,0x18,0x40,0x10,0x40,0x20,0x40, 0x37,0xFC,0x60,0xC0,0xA0,0xE0,0x21,0x60, 0x21,0x50,0x22,0x48,0x24,0x4E,0x2B,0xF4, 0x20,0x40,0x20,0x40,0x20,0x40,0x00,0x00,};void initgr(void) /* BGI初始化 */{ int gd = DETECT, gm = 0; /* 和gd=VGA,gm=VGAHI是同样效果 */ registerbgidriver(EGAVGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */ initgraph(&gd, &gm, "");}void drawmat(char *mat,int matsize,int x,int y,int color)/*依次:字模指针、点阵大小、起始坐标(x,y)、颜色*/{ int i, j, k, n; n = (matsize - 1) / 8 + 1; for (j = 0; j < matsize; j++) for (i = 0; i < n; i++) for (k = 0;k < 8; k++) if (mat[j * n + i] & (0x80 >> k)) /*测试为1的位则显示*/ putpixel(x + i * 8 + k, y + j, color);}int main(void){ int i, j; int size=32; char s[]="宋"; initgr(); /* BGI初始化 */ for (i = 0; i < 2; i++) { if (hz[i].index[0]==s[0] && hz[i].index[1]==s[1]) { drawmat(hz[i].data, 16, 100, 200, WHITE); } } getch(); /* 暂停一下,看看前面绘图代码的运行结果 */ closegr(); /* 恢复TEXT屏幕模式 */ return 0;}