⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄

📁 调用汉字库显示汉字(点阵字库和曲线字库)
💻
📖 第 1 页 / 共 2 页
字号:
					if(x>=x1+maxwidth)
					{
						x=x1;
						y=y+45;
					}
			}
		}
	return(y+60);
}
int chinese::puthz48(int x,int y,int z,int color,char *p,int maxwidth,int flag)
{
	unsigned int i,c1,c2,c3,f=0;
	int i1,i2,i3,rec,x1;
	long l;
	char by[270];
	x1=x;
	if (flag==2) x=x+96;
	while ((i=*p++)!=0)
	{
		if(i>0xa1)
		if(f==0)
		{
			c1=(i-0xb0)&0x7f;
			f=1;
		}
	else
	{
		c2=(i-0xa1)&0x7f;
		f=0;
		rec=c1*94+c2;
		l=rec*270l;
		fseek(handle,l,SEEK_SET);
		fread(by,270,1,handle);
		for (i1=0;i1<45;i1++)
			for(i2=0;i2<=2;i2++)
				for(i3=0;i3<8;i3++)
					if(getbit(by[i1*3+i2],7-i3))
						putpixel(x+i1,y+i2*8+i3,color);
						/*for (i1=45;i1<90;i1++)
			for(i2=0;i2<3;i2++)
				for(i3=0;i3<8;i3++)
					if(getbit(by[i1*3+i2],7-i3))
						putpixel(x+i1-45,y+24+i2*8+i3,color);*/
					x=x+45+z;
					if(x>=x1+maxwidth)
					{
						x=x1;
						y=y+80;
					}
			}
		}
	return(y+80);
}
int chinese::puthz24rat(int x,int y,int z,int color,char *p,char d,int angle)
{
	unsigned int i,c1,c2,f=0;
	int i1,i2,i3,rec;
	long l;
	char by[72];
	while ((i=*p++)!=0)
	{
		if(i>0xa1)
		if(f==0)
		{
			c1=(i-0xb0)&0x7f;
			f=1;
		}
	else
	{
		c2=(i-0xa1)&0x7f;
		f=0;
		rec=c1*94+c2;
		l=rec*72l;
		fseek(handle,l,SEEK_SET);
		fread(by,72,1,handle);
		for (i1=0;i1<24;i1++)
			for(i2=0;i2<=2;i2++)
	for(i3=0;i3<8;i3++)
		if(getbit(by[i1*3+i2],7-i3))
			putpixel(x+i1,y+i2*8+i3,color);
		if(angle==90)
	for (i1=0;i1<24;i1++)
			for(i2=0;i2<=2;i2++)
	for(i3=0;i3<8;i3++)
		if(getbit(by[i1*3+i2],7-i3))
			putpixel(x+i2*8+i3,y-i1,color);
		if(d=='h')
			x=x+24+z;
		if(d=='v')
		{
			if(angle==0)
				y=y+24+z;
			if(angle==90)
				y=y-24-z;
			}
		}
	}
	return(x);
}
int chinese::puthz24ext(int x,int y,int z,int color,int m,int n,char *p)
{
	unsigned int i,c1,c2,f=0;
	int i1,i2,i3,i4,i5,rec;
	long l;
	char by[72];
	while ((i=*p++)!=0)
	{
		if(i>0xa1)
		if(f==0)
		{
			c1=(i-0xb0)&0x7f;
			f=1;
		}
	else
	{
		c2=(i-0xa1)&0x7f;
		f=0;
		rec=c1*94+c2;
		l=rec*72l;
		fseek(handle,l,SEEK_SET);
		fread(by,72,1,handle);
		for (i1=0;i1<24*m;i1+=m)
			for(i4=0;i4<m;i4++)
			for(i2=0;i2<=2;i2++)
				for(i3=0;i3<8;i3++)
				if(getbit(by[i1/m*3+i2],7-i3))
					for(i5=0;i5<n;i5++)
					 putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
		x=x+24*m+z;
		}
	}
	return(x);
}

void showHanzi(unsigned char qw,unsigned char wm,int x,int y)
{
	long int firstIndex,secondIndex,wordOffset;
	unsigned char indexValue[2][3],case8Data[20];
	int xx[4],yy[4],curX,curY,i,j;
	char controlWord;

	setcolor(Color);
	byteNum_0=0;readCount_0=0;

	wordOffset=72*94*3;
	fseek(handle,wordOffset,SEEK_SET);
	fread(indexValue[0],3,1,handle);
	secondIndex=(long)indexValue[0][2]*65536+(long)indexValue[0][1]*256+(long)indexValue[0][0];
	wordOffset=(((long)qw-16)*94+wm-1)*3;
	fseek(handle,wordOffset,SEEK_SET);
	fread(indexValue[0],3,1,handle);
	fread(indexValue[1],3,1,handle);
	firstIndex=(long)indexValue[0][2]*65536+(long)indexValue[0][1]*256+(long)indexValue[0][0];
	byteNum_0=(long)indexValue[1][2]*65536+(long)indexValue[1][1]*256+(long)indexValue[1][0]-firstIndex;
	wordCont_0=(unsigned char *)malloc(byteNum_0);
	if(!wordCont_0){
		printf("Out of memory-1!\n");
		exit(0);}
	fseek(handle,firstIndex,SEEK_SET);
	fread(wordCont_0,1,byteNum_0,handle);
	while(1){
		if(readCount_0>=(2*byteNum_0)) break;
		controlWord=myRead_0();
		if(controlWord<=7)
			otherHandle(0,controlWord,1.0,1.0,x,y,&curX,&curY);
		else{
			setcolor(Color);
			case8Data[0]=controlWord;
			for(i=1;i<11;i++)
				case8Data[i]=myRead_0();
			case8Handle(handle,case8Data,secondIndex,x,y);
			setcolor(Color);
			}
		}
		free(wordCont_0);
		//fclose(handle);
	}

void otherHandle(int fnNo,unsigned char controlWord,double facX,double facY,int xc,int yc,int *curX,int *curY)
{
	int xx[4],yy[4],i,j;

	switch(controlWord){
	case 0:
	xx[0]=(int)fn[fnNo]()*16+fn[fnNo]();
	yy[0]=(int)fn[fnNo]()*16+fn[fnNo]();
	xx[0]=scalceX*xx[0]*facX;
	yy[0]=scalceY*yy[0]*facY;
	xx[0]+=xc;yy[0]+=yc;
	moveto(xx[0],yy[0]);
	*curX=xx[0];*curY=yy[0];
	break;
	case 1:
	xx[0]=(int)fn[fnNo]()*16+fn[fnNo]();
	xx[0]=scalceX*xx[0]*facX;
	xx[0]+=xc;
	lineto(xx[0],*curY);
	*curX=xx[0];
	break;
	case 2:
	yy[0]=(int)fn[fnNo]()*16+fn[fnNo]();
	yy[0]=scalceY*yy[0]*facY;
	yy[0]+=yc;
	lineto(*curX,yy[0]);
	*curY=yy[0];
	break;
	case 3:
	xx[0]=(int)fn[fnNo]()*16+fn[fnNo]();
	yy[0]=(int)fn[fnNo]()*16+fn[fnNo]();
	xx[0]=scalceX*xx[0]*facX;
	yy[0]=scalceY*yy[0]*facY;
	xx[0]+=xc;yy[0]+=yc;
	lineto(xx[0],yy[0]);
	*curX=xx[0];*curY=yy[0];
	break;
	case 4:
	xx[0]=*curX;yy[0]=*curY;
	xx[1]=(int)fn[fnNo]()*16+fn[fnNo]();
	yy[1]=(int)fn[fnNo]()*16+fn[fnNo]();
	xx[2]=(int)fn[fnNo]()*16+fn[fnNo]();
	yy[2]=(int)fn[fnNo]()*16+fn[fnNo]();
	xx[1]=scalceX*xx[1]*facX;
	yy[1]=scalceY*yy[1]*facY;
	xx[2]=scalceX*xx[2]*facX;
	yy[2]=scalceY*yy[2]*facY;
	xx[1]+=xc;yy[1]+=yc;
	xx[2]+=xc;yy[2]+=yc;
	xx[3]=xx[2];yy[3]=yy[2];
	b3_4(xx,yy);
	*curX=xx[2];*curY=yy[2];
	moveto(*curX,*curY);
	break;
	case 5:
	xx[0]=*curX;yy[0]=*curY;
	xx[1]=(int)fn[fnNo]()*16+fn[fnNo]();
	yy[1]=(int)fn[fnNo]()*16+fn[fnNo]();
	xx[2]=(int)fn[fnNo]()*16+fn[fnNo]();
	yy[2]=(int)fn[fnNo]()*16+fn[fnNo]();
	xx[3]=(int)fn[fnNo]()*16+fn[fnNo]();
	yy[3]=(int)fn[fnNo]()*16+fn[fnNo]();

	xx[1]=scalceX*xx[1]*facX;
	yy[1]=scalceY*yy[1]*facY;
	xx[2]=scalceX*xx[2]*facX;
	yy[2]=scalceY*yy[2]*facY;
	xx[3]=scalceX*xx[3]*facX;
	yy[3]=scalceY*yy[3]*facY;
	for(i=1;i<4;i++)
	{
		xx[i]+=xc;yy[i]+=yc;}
	b3_4(xx,yy);
	*curX=xx[3];*curY=yy[3];
	moveto(*curX,*curY);
	break;
	case 6:
	xx[0]=(int)fn[fnNo]()*16+fn[fnNo]();
	yy[0]=(int)fn[fnNo]()*16+fn[fnNo]();
	xx[1]=(int)fn[fnNo]()*16+fn[fnNo]();
	yy[1]=(int)fn[fnNo]()*16+fn[fnNo]();
	xx[0]=scalceX*xx[0]*facX;
	yy[0]=scalceY*yy[0]*facY;
	xx[1]=scalceX*xx[1]*facX;
	yy[1]=scalceY*yy[1]*facY;
	for(i=0;i<2;i++){
	xx[i]+=xc;yy[i]+=yc;}
	rectangle(xx[0],yy[0],xx[1],yy[1]);
	*curX=xx[1];*curY=yy[1];
	moveto(*curX,*curY);
	break;
	case 7:
	printf("Case 7 is not used!\n");
	exit(0);}
}

void case8Handle(FILE *handle,unsigned char *case8Data,long basePtr,int x0,int y0)
{
	long subIndexPtr;
	unsigned char subIndexValue[2][3],controlWord;
	int curX,curY,xc,yc,subOrder;
	double facX,facY;
	byteNum_8=0;readCount_8=0;
	if(case8Data[0]==0x8){
		subOrder=case8Data[1]*16+case8Data[2]-8;
		xc=case8Data[3]*16+case8Data[4];
		yc=case8Data[5]*16+case8Data[6];
		facX=(case8Data[7]*16+case8Data[8])/100.0;
		facY=(case8Data[9]*16+case8Data[10])/100.0;}
		else{
		if(case8Data[0]==0x9)
			subOrder=case8Data[9]*16+case8Data[10]+0xf6;
		else
			subOrder=case8Data[9]*16+case8Data[10]+0x1f6;
		xc=case8Data[1]*16+case8Data[2];
		yc=case8Data[3]*16+case8Data[4];
		facX=(case8Data[5]*16+case8Data[6])/100.0;
		facY=(case8Data[7]*16+case8Data[8])/100.0;}
		xc*=scalceX;yc*=scalceY;
		xc+=x0;yc+=y0;
		fseek(handle,basePtr+subOrder*3,SEEK_SET);
		fread(subIndexValue[0],3,1,handle);
		fread(subIndexValue[1],3,1,handle);
		subIndexPtr=(long)subIndexValue[0][2]*65536+(long)subIndexValue[0][1]*256+subIndexValue[0][0];
		byteNum_8=(long)subIndexValue[1][2]*65536+(long)subIndexValue[1][1]*256+subIndexValue[1][0]-subIndexPtr;
		subIndexPtr+=basePtr;
		wordCont_8=(unsigned char *)malloc(byteNum_8);
		if(!wordCont_8){
			printf("Out of memory-2\n");
			exit(0);}
		fseek(handle,subIndexPtr,SEEK_SET);
		fread(wordCont_8,1,byteNum_8,handle);
		while(1){
			if(readCount_8>=(byteNum_8*2)) break;
			controlWord=myRead_8();
			otherHandle(1,controlWord,facX,facY,xc,yc,&curX,&curY);
			}
			free(wordCont_8);
		}
unsigned char myRead_8(void)
		{ return(0x0f&(wordCont_8[readCount_8/2]>>((1-((readCount_8++)%2))*4)));}
unsigned char myRead_0(void)
{ return(0x0f&(wordCont_0[readCount_0/2]>>((1-((readCount_0++)%2))*4)));}

void b3_4(int *x,int *y)
{ int i,n,k,*bx,*by;
	double a,b,c,d,dt,xx,f0_3,f_0,f_1,f_2;

	n=100;
	bx=(int *)malloc(n*sizeof(int));
	by=(int *)malloc(n*sizeof(int));
	if((!bx)||(!by)){
		printf("Memory Error-3!");
		exit(0);}
	dt=(double)1/(double)n;
	a=((-1)*x[0]+3*x[1]-3*x[2]+x[3]);
	b=3*(x[0]-2*x[1]+x[2]);
	c=3*(x[1]-x[0]);d=x[0];
	f0_3=6*a*dt*dt*dt;f_2=f0_3+2*b*dt*dt;
	f_1=f0_3/6+b*dt*dt+c*dt;f_0=d;
	bx[0]=x[0];
	for(i=1;i<n;i++){
		f_0=f_0+f_1;bx[i]=f_0+0.5;
		f_1=f_1+f_2;f_2=f_2+f0_3;}
	a=((-1)*y[0]+3*y[1]-3*y[2]+y[3]);
	b=3*(y[0]-2*y[1]+y[2]);
	c=3*(y[1]-y[0]);d=y[0];
	f0_3=6*a*dt*dt*dt;f_2=f0_3+2*b*dt*dt;
	f_1=f0_3/6+b*dt*dt+c*dt;f_0=d;
	by[0]=y[0];
	for(i=1;i<n;i++){
		f_0=f_0+f_1;by[i]=f_0+0.5;
		f_1=f_1+f_2;f_2=f_2+f0_3;}

	moveto(bx[0],by[0]);
	for(i=1;i<n;i++)
		if((bx[i]!=bx[i-1])||(by[i]!=by[i-1]))
			lineto(bx[i],by[i]);
		lineto(x[3],y[3]);
		free(bx);
		free(by);
}
int chinese::putps(int x,int y,int z,int color,char *p,double m,double n)

{
	unsigned int i,c1,c2,f=0;
	scalceX=m;scalceY=n;
	Color=color;
	while ((i=*p++)!=0)
	{
		if(i>0xa1)
		if(f==0)
		{
			c1=(i-160)&0x7f;
			f=1;
		}
	else
	{
		c2=(i-160)&0x7f;
		f=0;
		showHanzi(c1,c2,x,y);
		x=x+150*m+z;
		}
	}
	return(x);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -