干嘛要N个1维数组?不管它多少维,只要能装下,1维就够了。Text1的MultiLine属性设置成TruePrivate Sub Command1_Click() Dim tX As Long Dim tY As Long Dim tArray() As Long Dim tArrayWidth As Long Dim tArrayHeight As Long
tArrayWidth = 10 tArrayLine = 10
ArraySetBound tArray(), tArrayLine, tArrayWidth
For tX = 0 To 9 For tY = 0 To 9 ArrayPutValue tArray(), tY * 10 + tX, tX, tY, tArrayWidth Next Next
Text1.Text = ""
For tX = 0 To 9 For tY = 0 To 9 Text1.Text = Text1.Text & " " & ArrayGetValue(tArray(), tX, tY, tArrayWidth) Next Text1.Text = Text1.Text & vbCrLf Next
End SubPublic Function ArrayGetValue(ByRef pArray() As Long, ByVal pX As Long, ByVal pY As Long, ByVal pArrayWidth As Long) As Long '返回数组pArray的pX,pY元素的值,数组pArray的宽度是pArrayWidth。 Dim tOutLong As Long Dim tArray_Index As Long tArray_Index = pY * pArrayWidth + pX tOutLong = pArray(tArray_Index)
ArrayGetValue = tOutLong End FunctionPublic Sub ArrayPutValue(ByRef pArray() As Long, ByVal pValue As Long, ByVal pX As Long, ByVal pY As Long, ByVal pArrayWidth As Long) '将pValue写入数组pArray的pX,pY元素,数组pArray的宽度是pArrayWidth。 Dim tArray_Index As Long tArray_Index = pY * pArrayWidth + pX pArray(tArray_Index) = pValue End SubPublic Sub ArraySetBound(ByRef pArray() As Long, ByVal pX As Long, ByVal pY As Long) '定义数组pArray的下界,使其容纳pX*pY个元素。 Dim tArray_Length As Long tArray_Length = (pX * pY) - 1 ReDim pArray(tArray_Length) End Sub
了解这些之后,你就会理解BMP文件的文件头为什么要那么设计了。普通的图象亮度是256级别,但是在医学、天文领域采样模拟量可能需要更高的精确度。假如我要为高精度的医学影象设计一个高精度65536级灰度的图片格式,可能就是下面这个样子:Type tpMapFile fhHeight as Long fhWidth as Long fhPixs() as Integer End Type初始化这个图象的过程就是: Dim tPixs_Length as long Dim tMap As tpMapFile tPixs_Length=tMap.fhHeight*tMap.fhWidth - 1 '元素总数减去1(因为数组是从0开始的) ReDim tMap.fhPixs(tPixs_Length)假如我想在一个文件里保存多张图片,则修改成这样: Type tpMapFile fhHeight as Long fhWidth as Long fhPageCount as Long '页数 fhPixs() as Integer End Type初始化这个图象的过程就是: Dim tPixs_Length as long Dim tMap As tpMapFile tPixs_Length=tMap.fhPageCount*tMap.fhHeight*tMap.fhWidth - 1 ReDim tMap.fhPixs(tPixs_Length)通常的图象是rgb格式,但是在天文,军事领域可能需要参考多个波长的光谱。假设每个波长的光谱有65536级灰度:Type tpMapFile fhHeight as Long fhWidth as Long fhLayCount as Long '位平面数 fhPageCount as Long '页数 fhPixs() as tpPix End Type之所以举这个例子是希望提醒你:许多看似是死规矩的东西,其实并没有限制。好比图象并非只允许是256级的RGB格式。假如你知道原理,可以根据具体情况决定如何应用。
Dim tX As Long
Dim tY As Long
Dim tArray() As Long
Dim tArrayWidth As Long
Dim tArrayHeight As Long
tArrayWidth = 10
tArrayLine = 10
ArraySetBound tArray(), tArrayLine, tArrayWidth
For tX = 0 To 9
For tY = 0 To 9
ArrayPutValue tArray(), tY * 10 + tX, tX, tY, tArrayWidth
Next
Next
Text1.Text = ""
For tX = 0 To 9
For tY = 0 To 9
Text1.Text = Text1.Text & " " & ArrayGetValue(tArray(), tX, tY, tArrayWidth)
Next
Text1.Text = Text1.Text & vbCrLf
Next
End SubPublic Function ArrayGetValue(ByRef pArray() As Long, ByVal pX As Long, ByVal pY As Long, ByVal pArrayWidth As Long) As Long
'返回数组pArray的pX,pY元素的值,数组pArray的宽度是pArrayWidth。
Dim tOutLong As Long Dim tArray_Index As Long
tArray_Index = pY * pArrayWidth + pX
tOutLong = pArray(tArray_Index)
ArrayGetValue = tOutLong
End FunctionPublic Sub ArrayPutValue(ByRef pArray() As Long, ByVal pValue As Long, ByVal pX As Long, ByVal pY As Long, ByVal pArrayWidth As Long)
'将pValue写入数组pArray的pX,pY元素,数组pArray的宽度是pArrayWidth。
Dim tArray_Index As Long
tArray_Index = pY * pArrayWidth + pX
pArray(tArray_Index) = pValue
End SubPublic Sub ArraySetBound(ByRef pArray() As Long, ByVal pX As Long, ByVal pY As Long)
'定义数组pArray的下界,使其容纳pX*pY个元素。
Dim tArray_Length As Long
tArray_Length = (pX * pY) - 1
ReDim pArray(tArray_Length)
End Sub
N=Y*Xmax+(X)三维数组:
N=Z*(Xmax*Ymax)+(Y*Xmax+(X))四维数组:
N=A*(Zmax*Xmax*Ymax)+(Z*(Xmax*Ymax)+(Y*Xmax+(X)))如果维数特别多,就需要用递归过程了。默认多维数组是88维,由于递归最大允许88级调用。但是如果你用自己设计的堆做递归,理论上只要变量空间允许,可以无限维。
A[x]=B[y,z]
x=y*z+z
所以用一個一維數組就可以表示已確定上下界的2維甚至3維4維..數組
fhHeight as Long
fhWidth as Long
fhPixs() as Integer
End Type初始化这个图象的过程就是:
Dim tPixs_Length as long
Dim tMap As tpMapFile
tPixs_Length=tMap.fhHeight*tMap.fhWidth - 1 '元素总数减去1(因为数组是从0开始的)
ReDim tMap.fhPixs(tPixs_Length)假如我想在一个文件里保存多张图片,则修改成这样:
Type tpMapFile
fhHeight as Long
fhWidth as Long
fhPageCount as Long '页数
fhPixs() as Integer
End Type初始化这个图象的过程就是:
Dim tPixs_Length as long
Dim tMap As tpMapFile
tPixs_Length=tMap.fhPageCount*tMap.fhHeight*tMap.fhWidth - 1
ReDim tMap.fhPixs(tPixs_Length)通常的图象是rgb格式,但是在天文,军事领域可能需要参考多个波长的光谱。假设每个波长的光谱有65536级灰度:Type tpMapFile
fhHeight as Long
fhWidth as Long
fhLayCount as Long '位平面数
fhPageCount as Long '页数
fhPixs() as tpPix
End Type之所以举这个例子是希望提醒你:许多看似是死规矩的东西,其实并没有限制。好比图象并非只允许是256级的RGB格式。假如你知道原理,可以根据具体情况决定如何应用。
W=宽H=128/W只可以做个8*16、4*32的小矩阵