[Déplacé .Net --> VB6] VB5 : image dans un tableau
littlerogue
Messages postés9Date d'inscriptionmardi 29 décembre 2009StatutMembreDernière intervention 2 janvier 2010
-
29 déc. 2009 à 20:24
littlerogue
Messages postés9Date d'inscriptionmardi 29 décembre 2009StatutMembreDernière intervention 2 janvier 2010
-
30 déc. 2009 à 13:12
Bonjour.
Je dois rendre d'ici peu un projet qui concerne le traitement d'image bruitées (bruit de type salt and peper : certains pixel deviennent blancs ou noirs) en utilisant les automates cellulaires : lorsque qu'une cellule répond à la propriété blanc ou noir elle prend la valeur de la majorité des cellules qui lui sont adjacentes ou une couleur aléatoire si aucune ne se démarque.
Bien sur ça ne marche pas, et je pense avoir plus ou moins localisé le problème :
je transporte chaque cellule de l'image que j'ai chargé dans un tableau afin de pourvoir traiter chaque case du tableau, or je débute et je connais mal VB, et j'ai probablement des problèmes avec les bornes de mon tableau image :
Private Sub PictureLoad()
Charger.Filter = "jpg (*.jpg)|*.jpg"
Charger.Action = 1
Picture1 = LoadPicture(Charger.filename)
Picture1.Visible = False 'Il faut vérifier que l'image chargée n'est pas plus grande que la taille de notre tableau - On masque l'image pendant cette opération
If Picture1.Height < 1000 And Picture1.Width < 1000 Then
Picture1.Visible = True
Else
MsgBox "Redimensionnement de l'image : prise en charge des formats 1000X1000 px au maximum"
End If
loaded = True
End Sub
charger est un objet de type comondialog et je l'utilise pour charger l'image que je place dans picture1.
Je place les points dans un tableau : (au besoin oubliez l'histoire des bordures qui ne nous concerne pas directement)
Private Sub FillTab1_withoutBorders() 'On remplit le tableau 1 avec la couleur de chaque pixel de l'image
For i = 0 To Picture1.ScaleWidth - 1 'On remplit Tab1 avec la couleur des px de l'image, en laissant la première colonne et la première ligne vides (pour les bordures)
For j = 0 To Picture1.ScaleHeight - 1
Tab1(i + 1, j + 1).color = Picture1.Point(i, j) 'Color est un Long
Next j
Next i
End Sub
Mais un plaçant des espions, je me rend compte que Picture1.point renvoie systématiquement -1, indiquant que les points demandés n'appartiennent pas à l'image ... or je tente bel et bien de faire parcourir i et j le long de l'image !
Autre chose : lorque j'utilise une image 6x6, i et j vont jusqu'à 6 alors que je parcours de 0 à 5 logiquement ... où est l'erreur ?
du coup mon tableau obtient des valeurs de couleurs aberrantes, et mon traitement n'a pas lieu correctement
Pouvez vous m'aider ? (au moins à stocker correctement une image dans un tableau ...)
A voir également:
[Déplacé .Net --> VB6] VB5 : image dans un tableau
littlerogue
Messages postés9Date d'inscriptionmardi 29 décembre 2009StatutMembreDernière intervention 2 janvier 2010 30 déc. 2009 à 10:33
Avec un autoredraw = true, ça va mieux et je ne reçoit pas -1 à toutes mes valeurs.
Par contre la propriétés Picture.height me renvoie 159 pour une image de 6x6 alors que scaleheight me renvoie bien 6 : je continue à utiliser cette dernière pour éviter de dépasser le 1000x1000.
Le parcours de i et j va toujours jusqu'à 6 alors que je lui demande scaleheight-1, soit 5 ... t un joli -1 pour cette valeur ^^'