楼主 amulee |
研究了一段时间的BMP文件,今天尝试创建数字BMP图片成功。 利用点阵法创建数字的图形,其中ArrNumber数组记录了各个数字的点阵情形。 Header数组记录了BMP文件的头信息,其中包括像素、文件大小等。 参考代码如下:- Sub Create24Bit()
- Dim FS As Integer
- Dim Header(1 To 54) As Byte
- Dim FName As String
- Dim ArrColor(2) As Byte
- Dim ArrNumber(9) As String
- Dim i%, j%, k%
- '定义数字数组
- ArrNumber(0) = "111111111111111100001111111011110111111011110111111011110111111011110111111011110111111011110111111011110111111011110111111100001111111111111111"
- ArrNumber(1) = "111111111111111110111111111000111111111110111111111110111111111110111111111110111111111110111111111110111111111110111111111000001111111111111111"
- ArrNumber(2) = "111111111111111100001111111011110111111011110111111111110111111111101111111111011111111110111111111101111111111011110111111000000111111111111111"
- ArrNumber(3) = "111111111111111100001111111011110111111011110111111111101111111110011111111111101111111111110111111011110111111011110111111100001111111111111111"
- ArrNumber(4) = "111111111111111111011111111111011111111110011111111101011111111011011111111011011111111000000111111111011111111111011111111110000111111111111111"
- ArrNumber(5) = "111111111111111000000111111011111111111011111111111010001111111001110111111111110111111111110111111011110111111011110111111100001111111111111111"
- ArrNumber(6) = "1111111111111111100011111111011101111110111111111110111111111110100011111110011101111110111101111110111101111110111101111111000011111111111111111"
- ArrNumber(7) = "111111111111111000000111111011101111111011101111111111011111111111011111111110111111111110111111111110111111111110111111111110111111111111111111"
- ArrNumber(8) = "111111111111111100001111111011110111111011110111111011110111111100001111111101101111111011110111111011110111111011110111111100001111111111111111"
- ArrNumber(9) = "111111111111111100011111111011101111111011110111111011110111111011100111111100010111111111110111111111110111111011101111111100011111111111111111"
- '文件头
- Header(1) = 66
- Header(2) = 77
- Header(3) = 230
- Header(4) = 1
- Header(11) = 54
- Header(15) = 40
- Header(19) = 12
- Header(23) = 12
- Header(27) = 1
- Header(29) = 24
- Header(39) = 18
- Header(40) = 11
- Header(43) = 18
- Header(44) = 11
- '开始生成文件
- For k = 0 To 9
- FName = ThisWorkbook.Path & "\" & k & ".bmp"
- FS = FreeFile
- Open FName For Binary Access Write As #FS
- '写文件头
- Put #FS, , Header
- '写颜色
- Pos = 55
- For i = 11 To 0 Step -1 '行
- For j = 1 To 12
- If Mid(ArrNumber(k), i * 12 + j, 1) = "1" Then
- ArrColor(0) = 0
- ArrColor(1) = 0
- ArrColor(2) = 0
- Else
- ArrColor(0) = 254
- ArrColor(1) = 254
- ArrColor(2) = 254
- End If
- Put #FS, Pos, ArrColor
- Pos = Pos + 3
- Next j
- Next i
- Close #FS
- Next k
- End Sub
附件: BMP_Number_Creator 0-9.rar
图片效果如下,因社区不允许上传BMP,故转成了PNG。
|
3楼 amulee |
补充一个生成1bit位深的BMP- Sub Create1Bit()
- Dim FS As Integer
- Dim Header(1 To 54) As Byte
- Dim FName As String
- Dim ArrNumber(9) As String
- Dim StrNumber As String
- Dim Temp As Byte
- Dim i%, j%, k%
- '定义数字数组
- ArrNumber(0) = "111111111111111100001111111011110111111011110111111011110111111011110111111011110111111011110111111011110111111011110111111100001111111111111111"
- ArrNumber(1) = "111111111111111110111111111000111111111110111111111110111111111110111111111110111111111110111111111110111111111110111111111000001111111111111111"
- ArrNumber(2) = "111111111111111100001111111011110111111011110111111111110111111111101111111111011111111110111111111101111111111011110111111000000111111111111111"
- ArrNumber(3) = "111111111111111100001111111011110111111011110111111111101111111110011111111111101111111111110111111011110111111011110111111100001111111111111111"
- ArrNumber(4) = "111111111111111111011111111111011111111110011111111101011111111011011111111011011111111000000111111111011111111111011111111110000111111111111111"
- ArrNumber(5) = "111111111111111000000111111011111111111011111111111010001111111001110111111111110111111111110111111011110111111011110111111100001111111111111111"
- ArrNumber(6) = "1111111111111111100011111111011101111110111111111110111111111110100011111110011101111110111101111110111101111110111101111111000011111111111111111"
- ArrNumber(7) = "111111111111111000000111111011101111111011101111111111011111111111011111111110111111111110111111111110111111111110111111111110111111111111111111"
- ArrNumber(8) = "111111111111111100001111111011110111111011110111111011110111111100001111111101101111111011110111111011110111111011110111111100001111111111111111"
- ArrNumber(9) = "111111111111111100011111111011101111111011110111111011110111111011100111111100010111111111110111111111110111111011101111111100011111111111111111"
- '文件头
- Header(1) = 66
- Header(2) = 77
- Header(3) = 110
- Header(4) = 0
- Header(11) = 62
- Header(15) = 40
- Header(19) = 12
- Header(23) = 12
- Header(27) = 1
- Header(29) = 1
- Header(39) = 18
- Header(40) = 11
- Header(43) = 18
- Header(44) = 11
- '先对数组进行补0
- For k = 0 To 9
- StrNumber = ""
- For i = 1 To 12
- StrNumber = StrNumber & Mid(ArrNumber(k), i * 12 - 11, 12) & String(20, "0")
- Next i
- ArrNumber(k) = StrNumber
- Next k
- '开始生成文件
- For k = 0 To 9
- FName = ThisWorkbook.Path & "\" & k & ".bmp"
- FS = FreeFile
- Open FName For Binary Access Write As #FS
- '写文件头
- Put #FS, , Header
- Pos = 55
- '写调色板
- Put #FS, Pos, 255
- Put #FS, Pos + 1, 255
- Put #FS, Pos + 2, 255
- Put #FS, Pos + 3, 0
- Put #FS, Pos + 4, 0
- Put #FS, Pos + 5, 0
- Put #FS, Pos + 6, 0
- Put #FS, Pos + 7, 0
- Pos = Pos + 8
- '写颜色,8个一取
- For i = 11 To 0 Step -1
- For j = 0 To 3
- Temp = WorksheetFunction.Bin2Dec(Val(Mid(ArrNumber(k), i * 32 + j * 8 + 1, 8)))
- Put #FS, Pos, Temp
- Pos = Pos + 1
- Next j
- Next i
- Close #FS
- Next k
- End Sub
|