Problème avec PSet

nadine2511 Messages postés 10 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 18 juillet 2004 - 10 juin 2004 à 10:18
cs_neria Messages postés 319 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 16 février 2009 - 10 juin 2004 à 14:42
Bonjour à tous,
j'ai écrit un code permettant de résupérer la couleur des pixels de l'image et la transformation de cette image en niveau de gris et son affichage dans une autre picture box. Derrière, je veux réaliser un seuillage automatique (c'est pour ca qque je voudrais avoir mes pixels dans un tableau) mais ici il n'y ait pas encore car j'ai des problèmes avec PSet, à moins que ce ne soit autre chose. Mais une fois sur 2 VB me dit "Nombre d'arguments incorrects ou affectation de propriété incorrecte" pour PSet. Et quand ca marche, le résultat est seulement constitué d'une partie de l'image initiale.
Picture1 et Picture2 ont les mêmes dimensions et sont toutes les 2 des pictures box.

Voici mon code:

Public Function CouleurPixel(Coul As Long)
Dim Reste As Double
Form1.Show
blue = Int(Coul / 65536)
'Print blue
green = Int((Coul - (65536 * blue)) / 256)
'Print green
red = Coul - ((blue * 65536) + (green * 256))
'Print red
Reste = (blue + red + green) Mod 3
Reste = Reste / 3
'Print Reste
CouleurPixel = (blue + red + green) / 3

If (Reste > 0.5) Then
CouleurPixel = CouleurPixel + (1 - Reste)
Else
CouleurPixel = CouleurPixel - Reste
End If

End Function

------------------------------------------------
Private Sub Form_Load()

Dim pixel(269, 461) As Long, val As Long
Picture1.Picture = LoadPicture("c:\image.bmp")
Form1.Show

With Picture1
.ScaleMode = vbPixels
.Picture = Picture1.Image
End With
SavePicture Picture1.Image, "C:\imageinitiale.bmp"

With Picture2
.ScaleMode = vbPixels
.AutoRedraw = True
.AutoSize = True
End With

' récupération des couleurs de chaque pixel de l'image
For i = 0 To Picture1.ScaleHeight-1
For j = 0 To Picture1.ScaleWidth-1
pixel(i, j) = CouleurPixel(Picture1.Point(i, j))
Next
Next

' création et affichage d'une image à niveaux de gris
For i = 0 To Picture1.ScaleHeight-1
For j = 0 To Picture1.ScaleWidth-1
val = RGB(pixel(i, j), pixel(i, j), pixel(i, j))
Picture2.PSet (i, j), val
Next
Next

End Sub

Si quelqu'un a une idée, merci de me venir en aide parce que là je patauge complètement.
Merci

Nadine2511

1 réponse

cs_neria Messages postés 319 Date d'inscription vendredi 21 février 2003 Statut Membre Dernière intervention 16 février 2009
10 juin 2004 à 14:42
Salut !

Le problème que tu as viens peut être d'une propriété de ta PictureBox : AutoRedraw, souvent elle pose des problèmes.

Pour le problème de l'argument, je pense que c'est à cause de la valeur de val qui pourrait être négative par exemple.

Sinon je te conseille d'utiliser les APIs SrtPixel et GetPixel qui sont beaucoup plus rapides.

@+ Neria
0
Rejoignez-nous