怎样把一个汉字的点阵码取出来

上传人:wt****50 文档编号:37841548 上传时间:2018-04-23 格式:DOC 页数:11 大小:127KB
返回 下载 相关 举报
怎样把一个汉字的点阵码取出来_第1页
第1页 / 共11页
怎样把一个汉字的点阵码取出来_第2页
第2页 / 共11页
怎样把一个汉字的点阵码取出来_第3页
第3页 / 共11页
怎样把一个汉字的点阵码取出来_第4页
第4页 / 共11页
怎样把一个汉字的点阵码取出来_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《怎样把一个汉字的点阵码取出来》由会员分享,可在线阅读,更多相关《怎样把一个汉字的点阵码取出来(11页珍藏版)》请在金锄头文库上搜索。

1、怎样把一个汉字的点阵码取出来?我要把汉字显示在 LED 上我以前回过的一个类似贴 http:/ 汉字库我用的是 UCDOS 的 HZK16,直接导入了 ROM他说的仅仅是取点阵码而已。 用软件就不必说了,那太多了。 用程序来: 在一块 MemDC 上写上汉字, 弄到合适大小。 然后 GetPixelCDC memDC; CBitmap memBmp; CBitmap *pOldBmp; memDC.CreateDC(.);/创建 DC(“画图工具” ) /创建“画布” /画布大小为 LED 点阵大小,用黑白两色的那种画布 memBmp.CreateBitmap(.); pOldBmp = me

2、mDC.SelectObject(/选择新的画布,保存旧的 /还可以新建字体 CFont,来创建你需要的字体 /. memDC.DrawText(.);/写入文字 for(int i=0; i 0)/好像非 0 是白色的,0 是黑色的,正好相反 else /点亮 LED 上对应的点 memDC.SelectObject(pOldBmp); memBmp.DeleteObject(); memDC.DeleteDC();听说还有一种方法的,但我只知道大致思路,其实也是系统显示字体的方式,就是根据汉 字的内码对系统字库本身进行寻址获取其点阵信息,寻址方式有一定的规律,内码的高低 位通过一个公式运算

3、后获得,具体公式忘记了汉字的区位码和其在汉字库中的偏移量关系如下(HZK16 为例): lOffset = ( (区码 - 1) * 94L + (位码 - 1) ) * 32L汉字点阵与编码-写大字 2007-09-25 23:14有关库文件准备: 12 点阵或者 16 点阵的汉字库文件.。扩展名是 fon。我这里也有,如果需要可 以和我联系。注意库文件和输入点阵数的匹配!#include #include#include#define reglen 94 /每区(行)有 94 位(列) #define subcode 0xa0 /内码与区位码的差值 /* #define font_size

4、 16 /点阵的数目/根据字体库进行更改 #define dotsize font_size*font_size/8 /一个汉字点阵所占的字节数char font_file_name=“16dot.fon“; /点阵字库文件名,必须与字体大小匹 配 char bindotdotsize; /存储点阵信息的数组 */ char str2,ch; int font_size,dotsize;void printcharbindot(char *bindot,int dotlen); int main() char font_file_name30;printf(“输入字体点阵数:(12 或 16)

5、:n“); scanf(“%d“, printf(“输入文字库文件的路径(如果在同目录可只输入文件名):n“); scanf(“%s“,font_file_name);dotsize=(font_size*font_size/8);#if(font_size=12) char bindot12*12/8; #else char bindot16*16/8; #endifFILE *fp=fopen(font_file_name,“r“); ch=getchar(); printf(“输入任意中文文本:n“); while(ch=getchar(),ch!=n) str0=ch;ch=getch

6、ar();str1=ch;int string_size=font_size*font_size;int i=0,j=0;unsigned char regcode; /区码unsigned char bitcode; /位码/计算区位码regcode=(unsigned char)stri-subcode;bitcode=(unsigned char)stri+1-subcode;/计算汉字在字库中的位置int offset=(regcode-1)*reglen+bitcode-1)*dotsize;/在字库文件中读取点阵数据fseek(fp,offset,SEEK_SET);fread(b

7、indot,sizeof(bindot),1,fp);/输出printcharbindot(bindot,dotsize);for(i=1;i=0;bitindex-)/输出当前字节第 bitindix 位的值bitvalue=(bindotcharnumbitindex)if(bitvalue=1)printf(“*“);elseprintf(“ “);/printf(“%c“,bitvalue+0);/一行输出完了换行if(+bitnum%font_size)=0)printf(“n“); return; 欢迎大家提出你们宝贵的意见或建议。标签: 嵌入式 中文 stm32 如何在液晶屏上显

8、示汉字?如何在液晶屏上显示汉字?1 1、汉字的点阵码、汉字的点阵码我现在知道的是:(我现在知道的是:(1 1)汉字可以以点阵的形式存储。汉字可以以点阵的形式存储。(2 2)液晶可以在屏液晶可以在屏 上画点上画点。这两者。这两者结合起来就可以在液晶屏上显示汉字结合起来就可以在液晶屏上显示汉字。最简单的方法,可以在。最简单的方法,可以在 程序中事先存储号点阵码的字符,然后要用的时候显示出来。程序中事先存储号点阵码的字符,然后要用的时候显示出来。 举个例子,举个例子,小这个汉字,它的点阵码是这样的:小这个汉字,它的点阵码是这样的:它对应的点阵字符码是:它对应的点阵字符码是:0x01,0x00,0x0

9、1,0x00,0x01,0x00,0x01,0x01,0x00,0x01,0x00,0x01,0x00,0x01, 0x00,0x00,0x01,0x00,0x05,0x40,0x05,0x20,0x01,0x00,0x05,0x40,0x05,0x20, 0x09,0x09, 0x10,0x10, 0x09,0x08,0x11,0x04,0x21,0x09,0x08,0x11,0x04,0x21, 0x04,0x41,0x00,0x04,0x41,0x00, 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00, 0x05,0x00,0x02,0x000x05,0x

10、00,0x02,0x00 共共 3232 个字节,其扫描的顺序是从左到右,从上到下。在显示的时候,再把个字节,其扫描的顺序是从左到右,从上到下。在显示的时候,再把 字符点阵按相同的顺序显示在液晶屏上,就看到了小字。字符点阵按相同的顺序显示在液晶屏上,就看到了小字。2 2、中文文档的存储方式、中文文档的存储方式那么我们看到的中文文档,它们全部都是存储的这种点阵码吗?那么我们看到的中文文档,它们全部都是存储的这种点阵码吗? 不是的。不是的。汉字在计算机内容实际是存储的一种特定编码汉字在计算机内容实际是存储的一种特定编码。比如。比如“小小”这个这个 字,在文档内我们在对应位置看到的字,在文档内我们在

11、对应位置看到的可能是可能是“D0“D0 A1”A1”,也可能是,也可能是“5C“5C 0F”0F”, 也就是可以有不同的编码表示也就是可以有不同的编码表示“小小”这个汉字,这就是汉字的编码方式。这个汉字,这就是汉字的编码方式。 我现在听过的概念有:我现在听过的概念有:区位码、国标码、内码、区位码、国标码、内码、unicodeunicode、UTF-8UTF-8,还有,还有 GBGB K K、GB2312GB2312(这两个好像与国标码是相关的,具体怎么对应,我的理解还不是很(这两个好像与国标码是相关的,具体怎么对应,我的理解还不是很 清晰)。除了清晰)。除了 UTF-8UTF-8 适合在网络上

12、传输,这里不管它。其它几种编码方式都是适合在网络上传输,这里不管它。其它几种编码方式都是 1616 位的,其大致关系如下:位的,其大致关系如下: 内码内码 = = 国标码国标码 + + 0x800x80; 国标码国标码 = = 区位码区位码 + + 0x200x20; 国标码国标码 = = GB2312GB2312; GBKGBK 好像是国标码的最新扩展。好像是国标码的最新扩展。汉字在汉字在计算机内部文档里面一般是以内码的形式存储。而文件系统里中文计算机内部文档里面一般是以内码的形式存储。而文件系统里中文 文件名一般以文件名一般以 unicodeunicode 编码的形式存储。编码的形式存储。

13、 以上这些理解不知对不对?再去百度一下加深对这些概念的理解。以上这些理解不知对不对?再去百度一下加深对这些概念的理解。 GB2312GB2312、GBKGBK 都是中文的内码,都是中文的内码,GB18030GB18030 好像是最新的扩展好像是最新的扩展(还包括了少数(还包括了少数 名族的字符),名族的字符),Big5Big5 是繁体汉字的内码。嵌入式系统上一般用是繁体汉字的内码。嵌入式系统上一般用 GB2312GB2312 就行了就行了 。 “D0“D0 A1”A1”就是:就是:“小小”的内码,是一种的内码,是一种 GB2312GB2312 码码,当然由于,当然由于 GBKGBK、GB180

14、GB180 3030 的继承性,同样的汉字其编码是一样的。的继承性,同样的汉字其编码是一样的。3 3、中文字库的作用、中文字库的作用当计算机程序读取一个中文文档时,它当计算机程序读取一个中文文档时,它读到的是内码,为什么能够在屏幕读到的是内码,为什么能够在屏幕 上显示其字形上显示其字形呢?呢? 方法是在方法是在计算机内部存储了一个汉字字库,存储了大部分汉字的字形点阵计算机内部存储了一个汉字字库,存储了大部分汉字的字形点阵 。而且对于每一个汉字来说,它在。而且对于每一个汉字来说,它在字库里点阵的位置字库里点阵的位置 与其与其 内码存在着一一对内码存在着一一对 应关系应关系。也就是说只要知道了内码

15、,就可以在字库文件里找到其点阵码,然后。也就是说只要知道了内码,就可以在字库文件里找到其点阵码,然后 进行显示。进行显示。 GB2312GB2312 型的内码是通过以下的换算找到其在字库中的位置的,以型的内码是通过以下的换算找到其在字库中的位置的,以“小小”字字 为例:为例: 它的内码是它的内码是“D0“D0 A1”A1”,别减去,别减去“A0“A0 A0”A0”得到其区位码,得到其区位码,“30“30 01”01”。字库。字库 的组织方式就是根据区位码排列的的组织方式就是根据区位码排列的,在,在 0x300x30 区,序号区,序号 2929,每个区,每个区 9494 个汉字,个汉字, 一次其序号为:(一次其序号为:(0x30-10x30-1)*94*94 + + (01-101-1)。当然从字节的存储位置来说,还)。当然从字节的存储位置来说,还 要乘以要乘以 3232,(每个汉字,(每个汉字 16*1616*16 点阵,占据点阵,占据 3232 个字节),综合起来,公式可以个字节),综合起来,公式可以 写成:写成: CharPosCharPos = = ( (NH-0xA1NH-0xA1)* * 9494

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号