FOR NEXT.. FUERA INTERVALO CON MATRICES
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
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
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) ...
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) ...
