[Déplacé .Net --> VB6] VB5 : image dans un tableau

littlerogue Messages postés 9 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 2 janvier 2010 - 29 déc. 2009 à 20:24
littlerogue Messages postés 9 Date d'inscription mardi 29 décembre 2009 Statut Membre Derniè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 ...)

12 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
30 déc. 2009 à 08:55
Mets la propriété AutoRedraw de ton pictureBox à True, ca devrait aider pour ces -1

Picture1.ScaleWidth - 1
pourquoi ne pas plutot utiliser la taille de l'image.

genre:
Picture1.Picture.Width - 1

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
littlerogue Messages postés 9 Date d'inscription mardi 29 décembre 2009 Statut Membre Derniè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 ^^'
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
30 déc. 2009 à 10:42
histoire de scale ou himetric


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
littlerogue Messages postés 9 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 2 janvier 2010
30 déc. 2009 à 10:58
pardon ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
30 déc. 2009 à 11:10
je charge une image de 15x15 dans mon picturebox.

je souhaite connaitre la taille de l'image :

? Picture1.Picture.Height
397

cool, mais comment on retombe sur 15 ?

? Clng(scalex(Picture1.Picture.Width, vbHimetric, vbpixels))
 15
? Clng(scaley(Picture1.Picture.Height, vbHimetric, vbpixels))
 15




Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
littlerogue Messages postés 9 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 2 janvier 2010
30 déc. 2009 à 11:27
ça revient au même qu'utiliser scaleheight et scalewidth j'ai l'impression
i et j vont toujours jusqu'à 6, d'où le dernier -1
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
30 déc. 2009 à 11:31
ca revient au même si tu resize ta picture box, ce qui en soit n'est pas indispensable

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
littlerogue Messages postés 9 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 2 janvier 2010
30 déc. 2009 à 11:42
Ok, je pense que je vais garder la forme la plus simple du scaleheight, vu que les résultats sont équivalents.

Je ne comprends pas ce qui pousse le i et le j à aller jusqu'à 6 alors qu'ils devraient aller de 0 à 5 ...

For i = 0 To (Picture1.ScaleWidth - 1
        For j = 0 To (Picture1.ScaleHeight - 1)
        Tab1(i + 1, j + 1).color = Picture1.Point(i, j)
        Next j
    Next i

où est le problème dans une boucle aussi simple ?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
30 déc. 2009 à 11:45
tente en supprimant la bordure de ton picturebox


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
littlerogue Messages postés 9 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 2 janvier 2010
30 déc. 2009 à 12:17
le problème est que je n'ai pas définis de bordure : j'ai mis BorderStyle à none
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
30 déc. 2009 à 12:58
et ScaleWidth renvoie bien 6 ?

as tu testé en pas a pas ?


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
littlerogue Messages postés 9 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 2 janvier 2010
30 déc. 2009 à 13:12
je teste depuis hier en pas à pas avec des espions sur i, j scalewidth etc ..
scalewidth renvoie bien 6
0