Sub Compress(Data() As Byte, suPtr As Long, Optional ByVal I As Long)
Dim e As Long '记录数组指针 array pointer
Dim a1 As Long '记录数组值重复的个数 count of repeated arrays
Dim a2 As Long '记录第一个重复的序号 first number of repeated one
Dim su() As Byte '压缩后的数组 compressed array
Dim a3 As Long '记录压缩后的数组的指针 compressed array pointer
If I <= UBound(Data) Then
'压缩算法 compressing method
ReDim su(I)
Do While e < I
DoEvents
If (a1 = 255) Then
su(a3) = Data(e)
su(a3 + 1) = a1
a3 = a3 + 2
a1 = 0
If (e = I - 1) Then
su(a3) = Data(I)
su(a3 + 1) = 0
ReDim Preserve su(a3 + 5)
End If
Else
If Data(e) = Data(e + 1) Then
a1 = a1 + 1
If (e = I - 1) Then
su(a3) = Data(e)
su(a3 + 1) = a1
ReDim Preserve su(a3 + 5)
End If
Else
su(a3) = Data(e)
su(a3 + 1) = a1
a3 = a3 + 2
a1 = 0
If (e = I - 1) Then
su(a3) = Data(I)
su(a3 + 1) = 0
ReDim Preserve su(a3 + 5)
End If
End If
End If
e = e + 1
Loop
suPtr = a3
ReDim Data(UBound(su)) As Byte
CopyMemory Data(0), su(0), UBound(su) + 1
Exit Sub
Else
'还原算法 restore method
Dim msu() As Byte '还原后要放入的数组 decompressed array
Dim mi As Long '记录还原时读出的指针 decompressed pointer
Dim mx As Long '重复的个数的递增 repeating count's increasing
Dim ma As Long '记录写入的指针 writed pointer
mi = 0: mx = 0: ma = 0
ReDim msu(I)
Do While mi < suPtr
Do While mx <= Data(mi + 1)
msu(ma) = Data(mi)
mx = mx + 1
ma = ma + 1
Loop
mx = 0
mi = mi + 2
Loop
ReDim Data(UBound(msu)) As Byte
CopyMemory Data(0), msu(0), UBound(msu) + 1
End If
End Sub能给我解释一下这段程序么?它这用的是什么压缩方法?我该找找哪方面资料。我采集的图像是BMP格式的。谢谢各位了。急用
Dim e As Long '记录数组指针 array pointer
Dim a1 As Long '记录数组值重复的个数 count of repeated arrays
Dim a2 As Long '记录第一个重复的序号 first number of repeated one
Dim su() As Byte '压缩后的数组 compressed array
Dim a3 As Long '记录压缩后的数组的指针 compressed array pointer
If I <= UBound(Data) Then
'压缩算法 compressing method
ReDim su(I)
Do While e < I
DoEvents
If (a1 = 255) Then
su(a3) = Data(e)
su(a3 + 1) = a1
a3 = a3 + 2
a1 = 0
If (e = I - 1) Then
su(a3) = Data(I)
su(a3 + 1) = 0
ReDim Preserve su(a3 + 5)
End If
Else
If Data(e) = Data(e + 1) Then
a1 = a1 + 1
If (e = I - 1) Then
su(a3) = Data(e)
su(a3 + 1) = a1
ReDim Preserve su(a3 + 5)
End If
Else
su(a3) = Data(e)
su(a3 + 1) = a1
a3 = a3 + 2
a1 = 0
If (e = I - 1) Then
su(a3) = Data(I)
su(a3 + 1) = 0
ReDim Preserve su(a3 + 5)
End If
End If
End If
e = e + 1
Loop
suPtr = a3
ReDim Data(UBound(su)) As Byte
CopyMemory Data(0), su(0), UBound(su) + 1
Exit Sub
Else
'还原算法 restore method
Dim msu() As Byte '还原后要放入的数组 decompressed array
Dim mi As Long '记录还原时读出的指针 decompressed pointer
Dim mx As Long '重复的个数的递增 repeating count's increasing
Dim ma As Long '记录写入的指针 writed pointer
mi = 0: mx = 0: ma = 0
ReDim msu(I)
Do While mi < suPtr
Do While mx <= Data(mi + 1)
msu(ma) = Data(mi)
mx = mx + 1
ma = ma + 1
Loop
mx = 0
mi = mi + 2
Loop
ReDim Data(UBound(msu)) As Byte
CopyMemory Data(0), msu(0), UBound(msu) + 1
End If
End Sub能给我解释一下这段程序么?它这用的是什么压缩方法?我该找找哪方面资料。我采集的图像是BMP格式的。谢谢各位了。急用
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货