FOR NEXT.. FUERA INTERVALO CON MATRICES

maya
05 de Agosto del 2004
Hola a todos!!

Estoy intentando crear un programilla en VB6 que sea capaz de calcular unas mascaras de gradiente en una imagen en tonos de gris.

Mi problema es que una vez que elijo una pequeña ventana de la imagen (ventana de 5x5)para calcular los niveles de gris, en principio me deja hacer el bucle, pero luego al hacer que me aparezca en el cuadro de texto del formulario el resultado me dice que esta fuera del intervalo.

Aqui os expongo el trozo de codigo que da error a ver si podeis hecharme una manita

Gracias:

--------------------
option explicit

Dim i, j As Integer \' DECLARA VARIABLES FILA COLUMNA
Dim pixel& \' DECLARA VARIABLE PIXELES DE LA IMAGEN
Dim Gris As Integer \' declara la variable tono de gris
Dim fila, columna As Integer
Dim pixcentral() As Double

fila = InputBox("FILA DEL PIXEL CENTRAL (VENTANA 5x5) : ")
columna = InputBox("COLUMNA DEL PIXEL CENTRAL (VENTANA 5x5) : ")




\' 2º) CALCULAMOS VALORES DE GRIS DE LA VENTANA DE LA IMAGEN


ReDim pixcentral(fila - 2 To fila + 2, columna - 2 To columna + 2)


For i = (fila - 2) To (fila + 2)

For j = (columna - 2) To (columna + 2)

pixel& = Picture1.Point(i, j) \' Point(i, j) en visualB sirve para que me lea los valores en sistema RGB de cada pixel de una imagen

\' Como los valores que me da point estan en Long, hay que convertirlo a notacion que se usa para tratar los colores

Gris = Int(pixel& / 65536) \'nivel de gris del pixel

\'como los valore de nivel de gris deben estar entre 0 y 255 se hace lo siguiente:

If Gris < 0 Then \'si es menos de cero se pone su valor absoluto

Gris = Abs(Gris)

End If \' si es mayor de 255 se pone 255

If Gris > 255 Then

Gris = 255

End If

pixcentral(i, j) = Gris \'nivel de gris del pixel original

Next

Next

pixcentral() = pixcentral()

\' ------------

Form8.Visible = True

Form8.Text1.Text = " "

For i = 0 To 4

Form8.Text1.Text = Form8.Text1.Text = " " & pixcentral(i, 0) & " " & pixcentral(i, 1) & " " & pixcentral(i, 2) & " " & pixcentral(i, 3) & " " & pixcentral(i, 4) & vbCrLf

Next

---------------

creo que el problema esta en que no me reconoce como matriz pixcentral() pero no se como solucionarlo

semperfimxl
05 de Agosto del 2004
Prueba con esto:

For i = fila - 2 To fila + 2

Form8.Text1.Text = Form8.Text1.Text & pixcentral(i, columna - 2) & " " & pixcentral(i, columna - 1) & " " & pixcentral(i, columna) & " " & pixcentral(i, columna+1) & " " & pixcentral(i, columna +2) & vbCrLf

Next

El problema esta en que cuando haces el redim a pixcentral tomando como limites fila - 2 y file + 2, columna - 2 y columna + 2, las propiedades (limites) LBOUND y UBOUND del arreglo pixcentral quedan de 0 to 4, 0 to 4 solo si los valores de fila y de columna son exactamente iguales a 2 (2 - 2 = 0, 2 + 2 = 4)

Si alguno de estos valores (fila, columna) son diferentes de 2 entonces dichas propiedades (limites inferior y superior del arreglo o matriz) quedan diferentes de 0 to 4...

Ejemplo:
Si el valor de fila = 5, columna = 2, entonces pixcentral = (3 to 7, 0 to 4)
Si el valor de fila = 10, columna = 15, entonces pixcentral = (8 to 12, 13 to 17) ...