|
汉字点阵是汉字显示的基础。网上屡见解决些问题的TC及PHP源码,但利用VB的甚少(常闻此语言过时之论,大概就是这个缘故吧)。以下是偶从16X16的汉字库中获取字模点阵的做法。学艺不精,代码难免有笨拙之处,还望高手指点。
public sub hzdz(ch As String) ' hzdz(): 获取汉字点阵的子程序
Dim fn As Integer
If ch <> "" Then '字符串变量ch用于存放待处理的汉字 chasc = hex(Asc(ch)) ' 获得该汉字的十六进制的ASCII码 qh = Left(chasc, 2) ' qh是对应汉字区码的高字节 wh = Right(chasc, 2) ' wh是对应汉字位码的低字节
'qm为该汉字的区码:qm=qh-a0H, wm为该汉字的位码:wm=wh-a0H qm = hexsub(Mid(qh, 1, 1), "a") * 16 + hexsub(Mid(qh, 2, 1), "0")
wm = hexsub(Mid(wh, 1, 1), "a") * 16 + hexsub(Mid(wh, 2, 1), "0")
Else MsgBox "请输入汉字" Exit sub End If offset = (94 * (qm - 1) + (wm - 1)) * 32 '计算该汉字在字库中的位置,16X16点阵汉字占32个字节。
fn = FreeFile Open App.Path & "\hzk16" For Binary As fn '打开汉字库 For i = 0 To 31 Get #fn, offset + i + 1, hz(i) '读取该汉字的32字节的点阵信息,存放于hz()字节数组中 Next i Close fn Text3.Text = ""
For i = 0 To 31 Step 2 for j=0 to 1
If Len(CStr(hex(hz(i+j)))) = 1 Then '将32个字节以每行二个字节分十六行以二进制形式在text3中显示 hzs = "0" & CStr(hex(hz(i))) Else hzs = CStr(hex(hz(i+j))) End If Text3.SelText = h_to_b(hzs)
next j
Text3.SelText =vbcrlf
Next i
end funciton
Public Function hexsub(a As String, b As String) As Integer 'hexsub:十六进制的减法运算函数 返回十进制结果 hexbite =hex2dec( a) -hexbite =hex2dec( b)
End Function
function hex2dec(a as string) as integer 'hex2dec():十六进制转十进制函数
If Not (IsNumeric(a)) Then a = UCase(a) Select Case a Case "A" aa = 10 Case "B" aa = 11 Case "C" aa = 12 Case "D" aa = 13 Case "E" aa = 14 Case "F" aa = 15 End Select Else aa = CDec(a) End If hex2dec=aa
end funciton
Public Function h_to_b(ByVal hex As String) As String 'h_to_b(): 十六进制度转二进制度函数 Dim i As Long Dim b As String
hex = UCase(hex) For i = 1 To Len(hex) Select Case Mid(hex, i, 1) Case "0": b = b & "0000" Case "1": b = b & "0001" Case "2": b = b & "0010" Case "3": b = b & "0011" Case "4": b = b & "0100" Case "5": b = b & "0101" Case "6": b = b & "0110" Case "7": b = b & "0111" Case "8": b = b & "1000" Case "9": b = b & "1001" Case "A": b = b & "1010" Case "B": b = b & "1011" Case "C": b = b & "1100" Case "D": b = b & "1101" Case "E": b = b & "1110" Case "F": b = b & "1111" End Select Next i
h_to_b = b End Function
核心的代码搞完了,加替换一试:
了了了了了了完了了了了了了了了了 了了了了了了了完了了了了了了了了 了完完完完完完完完完完完完完完了 了完了了了了了了了了了了了了完了 完了了了了了了了了了完了了完了了 了了了完完完完完完完完完了了了了 了了了了了了了了了了了了了了了了 了了了了了了了了了了了了完了了了 了完完完完完完完完完完完完完了了 了了了了了完了了完了了了了了了了 了了了了了完了了完了了了了了了了 了了了了了完了了完了了了了了了了 了了了了完了了了完了了了了了完了 了了了了完了了了完了了了了了完了 了了了完了了了了了完完完完完完了 了完完了了了了了了了了了了了了了。
哈哈快去领分啰!!^-^ |