中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-24 18:25
中国DOS联盟论坛 » DOS汉化世界 & 中文系统 (中文化室) » [原创]16x16及24x24点阵显示的c程序 查看 1,707 回复 1
楼 主 [原创]16x16及24x24点阵显示的c程序 发表于 2008-07-19 17:01 ·  中国 四川 资阳 电信
初级用户
积分 20
发帖 9
注册 2007-01-14 13:15
19年会员
UID 76504
性别 男
状态 离线
16x16及24x24点阵显示的c程序:
get 16x16 dot.c
//沙尘暴 2007.8.6
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc,char **argv)
{
unsigned char *str=argv;
unsigned long int i,l=strlen(str);
FILE *hzlib;
if(argc!=2)
{
printf("argv is not enoug!\n");
return 1;
}
hzlib=fopen("hzk16","rb");
if(hzlib==NULL)
{
printf("Can't open hzk16!");
return 2;
}
printf("unsigned char *hzstr=\"%s\";\n",argv);
printf("unsigned char hzdz=\n {\n",l/2);
while(*str)
{
fseek(hzlib,(long)(((*str-0xa0-1)*94L+*(str+1)-0xa0-1)*32L),SEEK_SET);
printf(" //\"%c%c\"的16×16点阵信息:\n ",*str,*(str+1));
for(i=1;i<33;i++)
{
printf("%#04X%s",fgetc(hzlib),i%8==0?i%32==0?",\n":",\n ":",");
}
printf(l==(str-argv+2)?" };":"");
str+=2;
}
fclose(hzlib);
return 0;
}

display 16x16.c
//沙尘暴 2007.8.6
#include <graphics.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <stdlib.h>
#include <conio.h>

void DisplayHZ16x16(char *Font,int x, int y, int color) //x: 行坐标, y: 列坐标 color:汉字的显示色
{
int c,row;
for(row=0;row<16;row++)
{
for(c=0;c<8;c++)if((Font>>(7-c))&0x1!=0)putpixel(c+0+(y*16),row+(x*16),color);
for(c=0;c<8;c++)if((Font>>(7-c))&0x1!=0)putpixel(c+8+(y*16),row+(x*16),color);
}
}

void main()
{
int gd=DETECT,gm; //图形屏幕初始化
int x,y;
#include <a:\t.txt>//在这儿包含你刚才得到的点阵信息文件
char *t=hzstr;
registerbgidriver(EGAVGA_driver);
initgraph(&gd,&gm,"");
x=0; y=0; //显示位置设置,7行6列
while(*hzstr)
{
if(y>39){x++;y=0;}
DisplayHZ16x16(hzdz,x,y,WHITE);
y++;
hzstr+=2;
}
getch();
closegraph();
}

show 24x24.C
//沙尘暴 2007.8.6
char mo24x24= //"模"字的24X24点阵信息
{
0x00,0x00,0x00, 0x00,0x00,0x00, 0x07,0x0C,0xC0, 0x06,0x0C,0xC0,
0x06,0x0C,0xDC, 0x06,0x7F,0xF0, 0x06,0xCC,0xC0, 0x1F,0xF0,0x70,
0x06,0x3F,0xF0, 0x07,0x30,0x70, 0x0F,0xBF,0xF0, 0x0E,0xF0,0x70,
0x1E,0xF0,0x70, 0x1E,0x3F,0xF0, 0x36,0x06,0x18, 0x06,0xFF,0xFC,
0x06,0x07,0x00, 0x06,0x0F,0x80, 0x06,0x0C,0xE0, 0x06,0x38,0x7C,
0x06,0xE0,0x18, 0x00,0x00,0x00, 0x00,0x00,0x00, 0x00,0x00,0x00
};

//显示24x24点阵水平扫描C语言示例代码:
void DisplayHZ24x24(char * FontModule,int x, int y,int color)
{
int row,c;
for(row=0;row<24;row++)
{
for(c=0;c<8;c++)if(((FontModule>>(7-c))&0x1)!=0)putpixel(c+00+(y*24),row+(x*24),color);
for(c=0;c<8;c++)if(((FontModule>>(7-c))&0x1)!=0)putpixel(c+ 8+(y*24),row+(x*24),color);
for(c=0;c<8;c++)if(((FontModule>>(7-c))&0x1)!=0)putpixel(c+16+(y*24),row+(x*24),color);
}
}
2 谢谢 发表于 2008-09-07 08:06 ·  中国 广东 中山 电信
高级用户
★★★
积分 940
发帖 374
注册 2007-10-17 21:51
18年会员
UID 100011
性别 男
来自 湖南张家界
状态 离线
我学个一点基础 C 语言,对这个无能为力,先抄下了源代码,等我学会了数据结构和高级 C 语言编程后再来研究,支持。
论坛跳转: