#include <Conio.h>
#include <graphics.h>
#define closegr closegraphvoid 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);
}
char zi24[]={ /* 以下是 '字' 的 24点阵隶书 字模72byte*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x08,0x1C,0x10,0x1F,0xFF,0xF0,0x18,0x00,0x30,0x18,0xFF,0x10,0x09,0xC3,0x90,0x00,0x3C,0x00,0x00,0x1C,0x00,0x3F,0xFF,0xFE,0x7E,0x0C,0xFE,0x00,0x1C,0x04,0x00,0x1C,0x00,0x04,0x3C,0x00,0x03,0xF8,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,}
char mo24[]={ /* 以下是 '模' 的 24点阵楷体_GB2312 字模,72 byte*/
0x00,0x00,0x00,0x00,0x00,0x60,0x02,0x00,0x30,0x03,0x0C,0x20,0x03,0x04,0x3C,0x02,0x07,0xE0,0x02,0x1C,0x40,0x02,0x00,0x40,0x03,0xC0,0x70,0x7E,0x1F,0x98,0x02,0x08,0x10,0x06,0x0F,0x90,0x07,0x88,0x10,0x0A,0xCB,0xE0,0x1A,0x05,0x00,0x12,0x01,0x1E,0x22,0x0F,0xFE,0x42,0x32,0x80,0x02,0x02,0x40,0x02,0x04,0x60,0x02,0x0C,0x30,0x02,0x18,0x1C,0x02,0x20,0x0F,0x02,0x00,0x00,
}
}
int main(void)
{
int i,j;
initgr(); /* BGI初始化 */
drawmat(yi12,12,100,125,WHITE);
drawmat(er12,12,115,125,WHITE);
drawmat(dian12,12,130,125,WHITE);
drawmat(zhen12,12,145,125,WHITE);
drawmat(song16,16,160,123,YELLOW);
drawmat(ti16,16,180,123,YELLOW);
drawmat(zi24, 24, 200, 119, CYAN);
drawmat(mo24, 24, 230, 117, GREEN);
drawmat(guan48, 48, 350, 110, RED);
drawmat(guan64, 64, 410, 100, YELLOW);
for(i=0;i<15;i++)
drawmat(matarray16k+i*32,16,200+i*15,200,WHITE);
drawmat(matarray16k+8*32,16,200+i*15,200,WHITE);
drawmat(matarray16k+9*32,16,200+(++i)*15,200,WHITE);
drawmat(matarray16k+10*32,16,200+(++i)*15,200,WHITE);
for(i=18;i<25;i++)
drawmat(matarray16k+(i-3)*32,16,200+i*15,200,WHITE); getch(); /* 暂停一下,看看前面绘图代码的运行结果 */ closegr(); /* 恢复TEXT屏幕模式 */
return 0;
}
错在哪,怎么改麻烦详细点说说
这个是你没有理解字模和函数的意思。
void drawmat(char *mat,int matsize,int x,int y,int color)这个函数要和char zi24[]={ /* 以下是 '字' 的 24点阵隶书 字模72byte*/
搭配着用。
也就是说,你要用字模转换工具把汉字转化成 char **88[]。然后在把这个放在函数里。
你看你的
drawmat(yi12,12,100,125,WHITE);
yi12是没有定义的。
而你看示例程序
char zi24[]={ /* 以下是 '字' 的 24点阵隶书 字模72byte*/
char mo24[]={ /* 以下是 '模' 的 24点阵楷体_GB2312 字模
定义了“字”“模”两个字。
所以函数drawmat(zi24,24,100,125,white)就是正确的。
-----------------------------------------------------------------
这样说可能你不是很明白,你可以参考一段我写的程序,下面是链接:
http://blog.csdn.net/gracefulphoenix/archive/2010/08/08/5796295.aspx
-------------------------------------------------------------------
另外字模转换工具在win-tc下就有。如图。
在超级工具集里面。
如果还有问题,可以在我的博客下留言。本人非大牛,但是可以一起讨论。
----------------------------------------------------------------------
如果你还不明白的,可以看一下这个程序,然后对比一下你的程序。就知道了。
*************************************************************
#include "Conio.h"
#include "graphics.h"
#define closegr closegraph
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);
}
char yang12S[]={
/* 以下是 '阳' 的 12点阵宋体 字模,24 byte */
0xF7,0xC0,0x94,0x40,0x94,0x40,0xA4,0x40,
0xA7,0xC0,0x94,0x40,0x94,0x40,0xF4,0x40,
0x84,0x40,0x87,0xC0,0x84,0x40,0x00,0x00,
};
char guang12S[]={
/* 以下是 '光' 的 12点阵宋体 字模,24 byte */
0x04,0x00,0x44,0x40,0x24,0x80,0x15,0x00,
0xFF,0xE0,0x12,0x00,0x12,0x00,0x12,0x00,
0x12,0x20,0x22,0x20,0xC1,0xE0,0x00,0x00,
};
int main(void)
{
int i, j;
initgr(); /* BGI初始化 */
setcolor(10);
/*我定义的是"阳光"两个字,所以,要在主函数前,把阳光这两个字的字模计算出来。在上面,看到了吗。*/
drawmat(yang12S,12,100,100,10);/*就是“阳”*/
drawmat(guang12S,12,200,200,10);/*就是"光"*/
getch(); /* 暂停一下,看看前面绘图代码的运行结果 */
closegr(); /* 恢复TEXT屏幕模式 */
return 0;
}
*****************************************************************