Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations cowski on being selected by the Eng-Tips community for having the most helpful posts in the forums last week. Way to Go!

Ragged arrays in Visual Basic 6.0

Status
Not open for further replies.

RichiePete

Marine/Ocean
Joined
Jul 8, 2001
Messages
2
Location
GB
Hello, I am currently writing an imaging program which will be used to count the number of objects (and their component pixels) within an image. My method of doing this is to have a variant array which stores the objects, I then have a second variant array within this first one relating to the pixel number, and a third to store the x and y coordinates. For example, the first x coordinate of the first element (pixel) of the first object will be;

Object(0)(0)(0) = 45

The object array is working correctly, but when I come to adding more elements within the first object array I have a syntax error and I can't understand why? For a pixel which is connected south-east on another pixel the code is:

If NorthWestPixel > 0 Then
c = 0 'x coord
d = 1 'y coord

For a = LBound(Object) To UBound(Object)
For b = LBound(Object(a)) To UBound(Object(a))
If Object(a)(b)(c) = nCol -1 And _
object(a)(b)(d) = nRow -1 Then

ReDim Preserve Object(a)(ubound(object(a))+1)
End If
Next b
Next a
End If
The Redim Preserve code just is not liked, does anyone have any suggestions?
 
Unfortunately, you can only use the Preserve keyword on the last element of a multidimensional array. Here is a sample workaround:
Code:
Option Explicit
Option Base 1

Public Type PixelData
    PixelNo As Long
    Xpos As Double
    Ypos As Double
End Type
Public ThisPixel() As PixelData

Sub Example()
    Dim i As Integer
    Dim sTmp As String
    
    ReDim ThisPixel(1)
    For i = 1 To 5
        ReDim Preserve ThisPixel(i)
        ThisPixel(i).PixelNo = i
        ThisPixel(i).Xpos = 45
        ThisPixel(i).Ypos = 105
    Next i
    For i = LBound(ThisPixel) To UBound(ThisPixel)
        sTmp = sTmp & ThisPixel(i).PixelNo & vbTab & _
               ThisPixel(i).Xpos & vbTab & _
               ThisPixel(i).Ypos & vbCrLf
    Next i
    MsgBox sTmp
    ReDim ThisPixel(1)
End Sub

DimensionalSolutions@Core.com
While I welcome e-mail messages, please post all thread activity in these forums for the benefit of all members.
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top