|
发表于 2011-6-3 12:44:44
|
显示全部楼层
字体生成工具,windows7可以运行,xp没有测试ourdev_645499EJD6OK.rar(文件大小:41K) (原文件名:FontGen.rar)
附上解码程序,有需要的人可以研究下
U8 FSGUI_DrawCharPixelNormal(U16 CharIndex,U16 x,U16 y)
{
U8 CharHighRead,CharWidthRead;
U16 CharMemLenPer,CharAreaNumRead,CharAreaStart,CharAreaEnd;
U32 CharDataPos,i,i2,j,px,Displayx,Displayy;
U8 CharPoint[40];
FSGUI_DriveActual->FontOper->FONTDataGoto(2*sizeof(U8));
FSGUI_DriveActual->FontOper->FONTDataRead(&CharHighRead,sizeof(U8));
FSGUI_DriveActual->FontOper->FONTDataRead(&CharWidthRead,sizeof(U8));
CharMemLenPer=((CharHighRead+7)/8)*CharWidthRead+2;
FSGUI_DriveActual->FontOper->FONTDataRead((U8*)&CharAreaNumRead,sizeof(U16));
CharDataPos=CharAreaNumRead*4+6;
for(i=0;i<CharAreaNumRead;i++)
{
FSGUI_DriveActual->FontOper->FONTDataRead((U8*)&CharAreaStart,sizeof(U16));
FSGUI_DriveActual->FontOper->FONTDataRead((U8*)&CharAreaEnd,sizeof(U16));
if((CharIndex<=CharAreaEnd)&&(CharIndex>=CharAreaStart))
{
CharDataPos+=(CharIndex-CharAreaStart)*CharMemLenPer;
FSGUI_DriveActual->FontOper->FONTDataGoto(CharDataPos);
FSGUI_DriveActual->FontOper->FONTDataRead(&CharHighRead,sizeof(U8));
FSGUI_DriveActual->FontOper->FONTDataRead(&CharWidthRead,sizeof(U8));
if(x+CharWidthRead>FSGUI_DriveActual->LCD_SizeH)
{
//表示不能写字体数据了
return 0x0;
}
else
{
Displayx=CharWidthRead;
}
if(y+CharHighRead>FSGUI_DriveActual->LCD_SizeV)
{
//表示不能写字体数据了
return 0x0;
}
else
{
Displayy=CharHighRead;
}
for(i2=0;i2<Displayy;i2++)
{
FSGUI_DriveActual->FontOper->FONTDataRead(CharPoint,(CharHighRead+7)/8);
px=x;
for(j=0;j<Displayx;j++)
{
if((CharPoint[j/8])&(FSGUI_AndValue[j%8]))
{
FSGUI_DriveActual->LCD_DrawPixelAt(px++,y,FSGUI_DriveActual->ColorFront);
}
else
{
FSGUI_DriveActual->LCD_DrawPixelAt(px++,y,FSGUI_DriveActual->ColorBack);
}
}
y++;
}
return Displayx;
}
else
{
CharDataPos+=(CharAreaEnd-CharAreaStart+1)*CharMemLenPer;
}
}
if(x+CharWidthRead>FSGUI_DriveActual->LCD_SizeH)
{
//表示不能写字体数据了
return 0x0;
}
if(y+CharHighRead>FSGUI_DriveActual->LCD_SizeV)
{
//表示不能写字体数据了
return 0x0;
}
if(CharIndex<0x80)
{
Displayx=FSGUI_GetCharWidthMax()/2;
}
else
{
Displayx=FSGUI_GetCharWidthMax();
}
Displayy=FSGUI_TextGetCharHigh();
for(i2=0;i2<Displayy;i2++)
{
FSGUI_DriveActual->FontOper->FONTDataRead(CharPoint,(CharHighRead+7)/8);
px=x;
for(j=0;j<Displayx;j++)
{
FSGUI_DriveActual->LCD_DrawPixelAt(px,y,FSGUI_DriveActual->ColorBack);
px++;
}
y++;
}
return Displayx;
} |
|