Option ExplicitPrivate Sub Command1_Click() Dim x As Long, y As Long
Picture1.Cls Picture1.Print Left$(Text1.Text, 1)
Debug.Print Left$(Text1.Text, 1) For y = 0 To 15 For x = 0 To 15 Debug.Print IIf(Picture1.Point(x, y) = vbBlack, "1", "0"); Next Debug.Print Next End SubPrivate Sub Form_Load() Picture1.BackColor = vbWhite Picture1.ForeColor = vbBlack Picture1.AutoRedraw = True Picture1.ScaleMode = vbPixels Picture1.FontName = "FixedSys" Picture1.FontSize = ScaleY(16, vbPixels, vbPoints) End Sub
有趣的问题。肯定可以做,但要牵涉到很多 API 处理以及一些判断算法(包括一些判断规则)。
的确是要用很多API,大体思路是将字体绘入场景,然后依次读取像素,组合成字模数据。
要注意的是:
字模是24时的边界对齐问题。
建立的位图是单色的就够用了。
取像素不要用GetPixel,可以用GetDIBits或CreateDIBSection(结合指针)。
感觉单做一个或几个的汉字点阵是没有实际意义的,明白了原理,应该做标准的GB2312字库,这样便于调用。注意是按照区位码排列的。
Dim x As Long, y As Long
Picture1.Cls
Picture1.Print Left$(Text1.Text, 1)
Debug.Print Left$(Text1.Text, 1)
For y = 0 To 15
For x = 0 To 15
Debug.Print IIf(Picture1.Point(x, y) = vbBlack, "1", "0");
Next
Debug.Print
Next
End SubPrivate Sub Form_Load()
Picture1.BackColor = vbWhite
Picture1.ForeColor = vbBlack
Picture1.AutoRedraw = True
Picture1.ScaleMode = vbPixels
Picture1.FontName = "FixedSys"
Picture1.FontSize = ScaleY(16, vbPixels, vbPoints)
End Sub