怎么样提取16X16汉字字库用于LCD显示?
怎么样提取16X16汉字字库用于LCD显示?
提取16X16汉字字库用于LCD显示
Lanno Cheeke 2006-8-24
使用文件:
UCDOS中的HZK16字模文件
原理:
获取汉字的区位码(又称GB码),在HZK16中算出此汉字的起始地址,以16x2数组方式保存,数组中的值为1则打印,否则为空。
程序说明:
所使用的文字为一级汉字。
双击:位码增一;右击:区码增一。
- CHZKView.h
- private:
- intjj;//位码
- intii;//区码
- FILE*pFile;//字库文件指针
- CHZKView.cpp
- //初始化操作
- CHZKView::CHZKView()
- {
- //TODO:addconstructioncodehere
- this->pFile=fopen("HZK16","r");
- ii=16;
- jj=1;
- }
- //输出
- voidCHZKView::OnDraw(CDC*pDC)
- {
- CHZKDoc*pDoc=GetDocument();
- ASSERT_VALID(pDoc);
- CRectrt;
- GetClientRect(&rt);
- intcx=rt.Width()/16;
- intcy=rt.Height()/16;
- unsignedcharpHz[]="对";
- inti=pHz[0]-0xA0;
- intj=pHz[1]-0xA0;
- fseek(pFile,(94*(i-1)+(j-1))*32l,SEEK_SET);
- unsignedcharmat[16][2];
- intk=0;
- fread(mat,32,1,pFile);
- jj++;
- fseek(pFile,(94*(ii-1)+(jj-1))*32l,SEEK_SET);
- fread(mat,32,1,pFile);
- for(j=0;j<16;j++)
- for(i=0;i<2;i++)
- for(k=0;k<8;k++)
- if(mat[j][i]&(0x80>>k)){
- pDC->SetPixel(i*8+k,j,RGB(255,0,0));
- pDC->Rectangle((i*8+k)*cx,j*cy,(i*8+k)*cx+cx,j*cy+cy);
- }
- }
- //清理操作
- CHZKView::~CHZKView()
- {
- fclose(this->pFile);
- }
- //区码增一
- voidCHZKView::OnRButtonUp(UINTnFlags,CPointpoint)
- {
- //TODO:Addyourmessagehandlercodehereand/orcalldefault
- ii++;
- Invalidate();
- CView::OnRButtonUp(nFlags,point);
- }
- voidCHZKView::OnLButtonDblClk(UINTnFlags,CPointpoint)
- {
- //TODO:Addyourmessagehandlercodehereand/orcalldefault
- Invalidate();
- CView::OnLButtonDblClk(nFlags,point);
- }
//输出
|
|