Sep
8
1 VB点阵字库读取 搜索留存
用HZK16对字型是有限制的。大家可以用一个比较简单的方法,就是先用label,在里面填入需要的汉字,然后把整个label中pixel按顺序读出来。
这样做可以让用户使用任意字型字号,而且显示效果非常好,这种方法我在我开发的一个HMI中使用过。
作者: Felix021 封 2007-9-8 01:37 回复此发言 删除
--------------------------------------------------------------------------------
2 回复:VB点阵字库读取 搜索留存
http://topic.csdn.net/t/20060113/15/4515339.html
转成图片后读的一个例子:
作者: 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事件中,它能立即更新汉字个数的显示。
在实例中选用了UCDOS 5.0汉字系统中的16点阵字库Hzk16作为提取汉字字模的标准字库。
作者: 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 回复此发言 删除
--------------------------------------------------------------------------------
转载请注明出自 ,如是转载文则注明原出处,谢谢:)
RSS订阅地址: https://www.felix021.com/blog/feed.php 。
用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
'运行本程序,需要在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
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
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 回复此发言 删除
--------------------------------------------------------------------------------
欢迎扫码关注:
转载请注明出自 ,如是转载文则注明原出处,谢谢:)
RSS订阅地址: https://www.felix021.com/blog/feed.php 。