如何新建字库的源代码。
刚才在直播间看了一下游戏的字体,说实在的楷体很好看,还有黑体,新宋体,幼圆。
这里还是有些不满足,因为英文字体在楷体中不太美感,是楷体的一种演变。但是英文的楷体英文不是最好看的字体。
我们可以把字体混合着崁进来,因为了解过早期的源码,而早期字库是点阵字库,压缩字库也只是压缩的是国标花字体。
当然还有字库的点阵放大。
字库的汉字,单独一个字是以点阵的形式出来的。
首先要了解汉字的单一汉字点阵的读取,然后是装载,还有保存。
矩形域图形装载:
屏幕上的像点:
ix=(row/4)*80+(row%4)*8192+(col/8)
row,col------整形变量
m,n------整形变量,列数行数(row,[col/8]*8),[n/8]*8+8。
fn------ 字符串指针。
hgc2ld.c:
#include "math.h"
#include "stdio.h"
#include "stdlib.h"
void hgc2_load(row,col,m,n,fn)
char *fn;
int row,col,m,n;
{
int i,j;
long int kk,ix,l;
char *buf;
FILE *fp;
char far *ptr=(char far *)0xB8000000;
kk=(long)m*(long)(n/8);
buf=malloc(kk*sizeof(char));
if ((fp=fopen(fn,"r+b"))==NULL)
{
printf("cannot open this file !");
exit(0);
}
fread (buf,sizeof(char),kk,fp);
l=0L;
for (i=0;i<=m-1;i++)
{
ix=(long)((row+i)/4)*80L+(long)(row+i)%4)*8192L+(long)(col/8);
for (j=0;j<=n-1;j=j+8)
{
*(ptr+ix)=buf[l]; l=l+1L; ix=ix+1L;
}
free(buf);fclose(fp);
return;
}矩形图形的保存:
变量定义同上。
vgal3sv.c
#include "dos.h"
#include "stdio.h"
#include "stdlib.h"
void vgal3_save(row,col,m,n,fn)
char *fn;
int row,col,m,n;
{
int i,j;
long int kk,ix,ii,l;
char *buf;
FILE *buf;
char far *ptr=(char far *)0xA000000;
kk=(long)m*(long)n;
buf=malloc(kk*sizeof(char));
if ((fp=open(fn,"w+b"))==NULL)
{
printf(("cannot open this file !");
exit (0);
}
l=0L;
ix=(long)row*320L+(long)col;
for (i=1;i<=m;i++)
{
ii=ix;
for (j=0;j<=n-1;j=j+1)
{
buf[l]=*(ptr+ii);l=l+1L;
ii=ii+1L;
}
ix=ix+320L;
}
fwrite (buf,sizeof(char),kk,fp);
free(buf); close(fp);
return;
}代码例子:(汉字的重建)
#include "dos.h"
#include "stdio.h"
#include "ommode.c"
#include "hgclset.c"
#include "hgclpt.c"
#include "hgclcs.c"
#include "hgclcp.c"
#include "hgclsv.c"
#include "hgclld.c"
#include "hgclhz.c"
#include "hgclbx.c"
main()
{
union REGS r;
static int a[4]={0,1,2,3};
int hgcl_point();
void ommode(),hgcl_cls(),hgcl_copy();
void hgcl_save(),hgcl_set();
void hgcl_load(),hgcl_hz(),hgcl_box();
FILE *fp;
hgcl_set();
if ((fp=fopen("cclibb","r+b"))==NULL)
{
printf("cannot open cclibb ! \n");
exit (0);
}
col=0;
for (i=0;i<=639;i++)
{
for (k=0;k<=349;k++)
hgcl_point(k,col,1,0);
col=col+1;
}
hgcl_cls(0,0,100,639);
hgcl_box(0,136,100,320,1);
for (i=0;i<=3;i++)
{
code=a[i];
hgcl_hz(2,10,160+24*i,code,4,fp,1);
}
hgcl_copy(10,160,35,320,40,160);
hgcl_save(40,160,24,96,"hanzi.dat");
hgcl_load(70,160,24,96,"hanzi.dat");
r.h.ah=0;int86(22,&r,&r);
ommode(7);fclose(fp);
}字库的四个字为“数据结构“这四个字。字库文件是"cclibb",这个字库可以用以前DOS下的金山汉字系统字库,类似名。24X24点阵字库。
hgc_set() 初始化图形模式
hgcl_point() 显示像点。
hgcl_cls()清除屏幕矩形区
hgcl_box() 填充像素
hgcz_hz() 显示汉字”数据结构“
hgcl_copy() 复制矩形区的汉字
hgcl_save() 保存汉字点阵到文件hanzi.dat。
hgcl_load() 显示汉字点阵文件hanzi.dat的数据内容。






鄂公网安备42010402000303号