标题:1 VB点阵字库读取 搜索留存   出处:Felix021 时间:Sat, 08 Sep 2007 01:37:38 +0000 作者:felix021 地址:https://www.felix021.com/blog/read.php?315 内容: 1 VB点阵字库读取 搜索留存 用HZK16对字型是有限制的。大家可以用一个比较简单的方法,就是先用label,在里面填入需要的汉字,然后把整个label中pixel按顺序读出来。 这样做可以让用户使用任意字型字号,而且显示效果非常好,这种方法我在我开发的一个HMI中使用过。 作者: Felix021 封 2007-9-8 01:37   回复此发言 删除 -------------------------------------------------------------------------------- 2 回复:VB点阵字库读取 搜索留存 http://topic.csdn.net/t/20060113/15/4515339.html 转成图片后读的一个例子: Option Explicit '运行本程序,需要在Form中放置以下控件: '名为Picutre1的PictureBox控件 '名为Text1和Text2的TextBox控件 '名为Command1的CommandButton控件 Private Sub Command1_Click() Picture1.ScaleMode = vbPixels Picture1.Font.Name = "宋体" Picture1.Font.Size = 9 Picture1.BackColor = vbWhite Picture1.Cls Picture1.Print Left(Text1.Text, 1) Dim X As Integer, Y As Integer Dim S As String '注:要设置Text2.MultiLine = True Text2.Text = "" For Y = 0 To 15 S = "" For X = 0 To 15 If Picture1.Point(X, Y) = 0 Then S = S & "*" Else S = S & " " End If Next X Text2.Text = Text2.Text & S & vbCrLf Next Y End Sub 作者: Felix021 封 2007-9-8 01:38   回复此发言 删除 -------------------------------------------------------------------------------- 4 回复:VB点阵字库读取 搜索留存 五、一个实际应用案例   图形点阵液晶在现代单片机系统中是一种十分常用的显示设备,BP机、手机上的显示屏就是图形点阵液晶。它能显示汉字和图形,与行列式键盘组成了单片机系统中最常用的人机交互界面。但是直接从中文系统汉字字库中提取的汉字字模并不能直接在液晶上显示,通常都必须经过格式上的调整和转换。   1、图形点阵液晶的汉字字模   与在西文DOS中显示汉字不同的是,图形点阵液晶并不是简单地用画点的方式来描出汉字。以常用的HD61202图形点阵液晶显示控制模块为例,它能控制64×64点阵液晶的显示,其显示RAM共64行,分8页,每页8行,每一页的数据寄存器分别对应液晶屏幕上的8行点,对显示RAM的一个字节单位赋值就是对当前列的8行(一页)的像素点是否显示进行控制。连续16列和相邻的2页的32字节显示RAM就可以控制一个汉字的显示区域。对这些显示RAM赋以相应的值就可以显示出一个汉字。   HD61202图形点阵液晶显示控制模块的汉字字模的排列实际上是标准汉字字模排列形式旋转而成的。对标准汉字字模转换的目的就是在单片机系统的数据存储器中(如E2PROM)存储经过调整的连续32字节的16进制数。   2、实际源程序   以下这段程序是放置在汉字源文本输入框(SrcTxt)的Change事件中。通过判断输入在文本框内的字符的ASCII码是否小于零,就能判断输入的字符是不是汉字。这段程序还能计算汉字字符串的长度。同时把输入的汉字存储在一个临时文件TempSrc.txt中。由于这段代码是放在文本框的Change事件中,它能立即更新汉字个数的显示。   Private Sub SrcTxt_Change( )   Static SStr As String   Dim i As Integer   Dim TempFile, TempFileBinary As String   TotalNum = 0   L = Len(SrcTxt.Text)   For i = 1 To L   tmpStr = StrConv(Mid$(SrcTxt.Text, i, 1), vbWide)   If Asc(Mid$(SrcTxt.Text, i, 1)) < 0 Then   TotalNum = TotalNum + 1   SStr = SrcTxt.Text   Else   MsgBox "写入的不是汉字!"   SrcTxt.Text = Left(SrcTxt.Text, Len(SrcTxt.Text) - 1)   Exit Sub   End If   Next i   LblNum.Caption = Str$(TotalNum) + "个汉字"   TempFile = App.Path + "\" + "TempSrc.txt"   'TempFileBinary = App.Path + "\" + "TempSrcBinary.txt"   Open TempFile For Output As #1   Print #1, SrcTxt.Text   Close #1   End Sub   在实例中选用了UCDOS 5.0汉字系统中的16点阵字库Hzk16作为提取汉字字模的标准字库。   Private Sub CmdCnt_Click( )   Dim TempSrcFile As String   Dim TempDestFile As String   Dim TempFile As String   Dim HzFile As String   Dim To61202(32) As Integer   Dim p(1 To 2) As Byte   Dim C1, C2   Dim rec As Integer   Dim Location As Long '汉字在字库中的位置   Dim Hz(0 To 31) As Byte '转换完的32字节的字模数据   Dim Buf1(0 To 31) As Byte '暂存转换过程中的32字节字模数据   Dim HzAll( ) As Byte '存放全部字模数据的动态数组   Dim LoopAll As Integer   Dim bit, k2, k3 As Byte   Dim i, j, i1, k, k1, k4, k5, k6 As Integer   DestTxt.Text = "" 'DestTxt是目标文本框,存放转换后的16进制数据   Flag = 0   TempDestFile$ = App.Path + "\" + "TempDest.txt"   If FileExists(TempDestFile$) Then Kill TempDestFile 'FileExists是一个检查文件是否存在的自定义函数   If SrcTxt.Text = "" Then '汉字输入框内无汉字则退出   MsgBox "没有可以转换的字模源文件!"   Exit Sub   End If   HzNum = Len(SrcTxt.Text) '获得汉字的个数   ReDim HzAll(0 To HzNum * 32 - 1) '重新定义动态数组的上界   Open TempFile For Output As #1   Print #1, SrcTxt.Text   Close #1 作者: Felix021 封 2007-9-8 01:39   回复此发言 删除 -------------------------------------------------------------------------------- 6 回复:VB点阵字库读取 搜索留存 http://www.baidu.com/s?tn=myie2dg&ie=gb2312&bs=16%B5%E3%D5%F3%D7%D6%BF%E2+%B6%C1%C8%A1+vb&sr=&z=&cl=3&f=8&wd=%B5%E3%D5%F3+%B6%C1%C8%A1+vb&ct=0 作者: Felix021 封 2007-9-8 01:40   回复此发言 删除 -------------------------------------------------------------------------------- Generated by Bo-blog 2.1.0