【求助】将黑白BMP直接读取到数组中,不要用控件和api (数据区压缩过)
下面给出3副图像,我想不用控件和api,直接把数据读取到数组中,
数据区被压缩过... http://it369.cn/bmp/1010.bmp
http://it369.cn/bmp/4952.bmp
http://it369.cn/bmp/6868.bmp
下面给出3副图像,我想不用控件和api,直接把数据读取到数组中,
数据区被压缩过... http://it369.cn/bmp/1010.bmp
http://it369.cn/bmp/4952.bmp
http://it369.cn/bmp/6868.bmp
解决方案 »
- 高分求教installshield打包工程卸载时不卸载部分文件夹
- vb6.0中在datagrid中显示出CheckBox!
- 大家有没有这样的经验——你爱的人不爱你?
- 很怪的问题啊,TreeVeiw
- 怎样用VB作一个可以看硬盘ID的ActiveX.DLL控件
- vb的dblist控件编程编译后在没装vb的系统下出错,怎么办?
- 请问怎样才可以将一个大的RecordSet对象变小(ADO)?
- 关于进销存,帮忙,我快愁死了。
- ASP SIMPLE PROBLEM(ABOUT DB OPERATION IN ASP) ,PLEASE SOLUTE IT.
- 关于timer控件
- 为什么用VB写的程序读hid手柄设备的信息,有的能读出来,有的不能读出来
- VB打开数据库的记录集失败
直接定义数组读文件吧,不明白可继续追问。
7F 9F FD FE FC EF BF FB F7 9F FD EF FC BF EF FE
7F 9F F8 7F FC FE FB EF 7F 9F F3 3F FC EF BF FD
DF 9F F3 3F FC DF F0 F7 F7 9F F3 3F FC FE E6 7F
FE 9F F3 3F FC F7 E6 7F FD 9F F3 3F FC FD E6 7F
FE 1F F3 3F F0 FB E6 7F FB 9F F3 3F FC 7F E6 7F
FB EF F3 3F DF FB E6 7F FD FE F8 7F F7 FD E6 7F
FE BF F7 FB F7 FE E6 7F FE F7 EF 7F F7 F7 F0 F7
DF BF FE FB FD FD FB DF FE DF 7F FE FE BF EF 7F
Dim str1 As String, str2() As String
Dim w As Long, x As Long, y As Long, i As Long, c1 As String, c2 As Long
Dim data(1023) As Long
str1 = "7F 9F FD FE FC EF BF FB F7 9F FD EF FC BF EF FE " & _
"7F 9F F8 7F FC FE FB EF 7F 9F F3 3F FC EF BF FD " & _
"DF 9F F3 3F FC DF F0 F7 F7 9F F3 3F FC FE E6 7F " & _
"FE 9F F3 3F FC F7 E6 7F FD 9F F3 3F FC FD E6 7F " & _
"FE 1F F3 3F F0 FB E6 7F FB 9F F3 3F FC 7F E6 7F " & _
"FB EF F3 3F DF FB E6 7F FD FE F8 7F F7 FD E6 7F " & _
"FE BF F7 FB F7 FE E6 7F FE F7 EF 7F F7 F7 F0 F7 " & _
"DF BF FE FB FD FD FB DF FE DF 7F FE FE BF EF 7F"
str2 = Split(str1, " ")
For w = 0 To 127
If (w + 1) Mod 16 = 0 Then
x = x + 1
End If
c1 = D_To_B("&H" & str2(w))
For i = 0 To 7
c2 = Mid(c1, i + 1, 1)
data(x * w + i) = IIf(c2, 255, 0)
Next
Next
End SubPublic Function D_To_B(ByVal Dec As Long) As String
Do
D_To_B = Dec Mod 2 & D_To_B
Dec = Dec \ 2
Loop While Dec
D_To_B = Format(D_To_B, "00000000")
End Function未测试,仅供参考。
dim Buffer() as byte
redim buffer(lof(1)-1)
get 1,,buffer
colse #1这样,图像的二进制是到了BUFFER里去了....但是你要的是不是这效果啊.反正没明白你啥意思.
Const W As Long = 64
Const H As Long = 16
Const ZOOM As Long = 10
Dim a() As String
Dim x As Long, y As Long, i As Long, n As Byte, c As Long
Me.AutoRedraw = True
Me.ScaleMode = vbPixels
Line (0, 0)-(W * ZOOM, H * ZOOM), vbBlack, BF
a = Split("7F 9F FD FE FC EF BF FB F7 9F FD EF FC BF EF FE " & _
"7F 9F F8 7F FC FE FB EF 7F 9F F3 3F FC EF BF FD " & _
"DF 9F F3 3F FC DF F0 F7 F7 9F F3 3F FC FE E6 7F " & _
"FE 9F F3 3F FC F7 E6 7F FD 9F F3 3F FC FD E6 7F " & _
"FE 1F F3 3F F0 FB E6 7F FB 9F F3 3F FC 7F E6 7F " & _
"FB EF F3 3F DF FB E6 7F FD FE F8 7F F7 FD E6 7F " & _
"FE BF F7 FB F7 FE E6 7F FE F7 EF 7F F7 F7 F0 F7 " & _
"DF BF FE FB FD FD FB DF FE DF 7F FE FE BF EF 7F", _
" ")
i = 0: n = CByte("&H" & a(i)): c = 8
For y = H - 1 To 0 Step -1 '屏幕坐标上下颠倒
For x = 0 To W - 1
If (n And &H80) <> 0 Then '白点
Line (x * ZOOM, y * ZOOM)-((x + 1) * ZOOM, (y + 1) * ZOOM), vbWhite, BF
End If
c = c - 1
If c = 0 Then
i = i + 1
If i <= UBound(a) Then n = CByte("&H" & a(i))
c = 8
Else
n = (n And &H7F) * 2
End If
Next
Next
End Sub
tpBitMapInfoHeader.biBitCount定义了图象的色深。黑白BMP为8;24Bit彩色图片为24。tpBitMapInfo是StretchDIBits显示图片时需要的结构。需要特别注意的是:8位的黑白图片实际是一种特殊颜色表的IndexColor格式的图片。与8位伪彩图片的区别就是颜色表的定义。
颜色表的格式是tpRGBQuad数组,从0到255,有256个元素。
我在VB下没写过针对8位图片的程序,所以不清楚VB下颜色表是怎么定义。相关资料你自己去找。Public Type tpBitMapFileHeader
bfType As Integer
bfSize As Long
bfReserved1 As Integer
bfReserved2 As Integer
bfOffBits As Long
End TypePublic Type tpBitMapInfoHeader
biSize As Long
biWidth As Long
biHeight As Long
biPlanes As Integer
biBitCount As Integer
biCompression As Long
biSizeImage As Long
biXPelsPerMeter As Long
biYPelsPerMeter As Long
biClrUsed As Long
biClrImportant As Long
End TypePublic Type tpRGBQuad
rgbBlue As Byte
rgbGreen As Byte
rgbRed As Byte
rgbReserved As Byte
End TypePublic Type tpBitMapInfo
bmiHeader As tpBitMapInfoHeader
bmiColors As tpRGBQuad
End Type
W=点阵宽度
X,Y=二维坐标I=Y*W+XX=I Mod W
Y=I \ W