Modifier, changer et supprimer les couleurs d'une image.!!

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 524 fois - Téléchargée 363 fois

Contenu du snippet

C'est ma première source sur ce site vite codé. Elle est faite pour un membre de ce site. Peut être elle peut rendre service pour quelqu'un d'autre.
C'est un exemple très simple, qui modifie et supprime des couleurs d'une image dans un picturebox.
J'ai crée une fonction qui utilise deux API GetPixel et SetPixelV (ou SetPixel) : La première pour récupérer la couleur réelle d'un point de l'image de coordonnée x et y, la deuxième API pour changer (supprimer) la couleur de cet point.
Il faut pour tester l'exemple :
- Module (module1) pour la fonction
- PictureBox (picture1) pour charger l'image a modifié.
- 5 Bouton (command1) indexer (rouge, vert, Bleue, Jaune, Noir)
Et c'est tout!
Bon ! J'ai testée avec l'image de type Bmp ça marche beaucoup mieux que avec les images jpg, c'est très normal car les images en jpg sont compressées, alors l'accès aux points de l'image sera compliquer et surtout lourde.
C?est très simple exemple, il y a des autres api et méthodes plus avancées pour ce genre des applications.
A vous ?

Source / Exemple :


'A mettre dans un module
'Déclaration des API et des variables

'L'API SetPixelV change la couleur d'un point donné de coordonnées x et y. 
'crColor c'est la nouvelle couleur pour cet point.
Private Declare Function SetPixelV Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Byte

' L'API GetPixel récupère la couleur d'un point de coordonnées x et y.
Private Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long) As Long
'hDC c'est le control qui contient l'image à modifier (de type "Bmp").
Dim x As Integer
Dim y As Integer

' fonction qui supprime une couleur d'une image
Public Sub SupCouleur(Picture As PictureBox, Couleur_Sup As Long)
'avec ces deux boucles for on parcoure tout les points de l'image
For x = 0 To Picture.ScaleWidth
    For y = 0 To Picture.ScaleHeight
        ' Ici on récupère la couleur du point de coordonnées x et y
        couleur_point = GetPixel(Picture.hDC, x, y)

        ' si c'est la couleur à supprimer alors on modifie ce point
        If couleur_point = Couleur_Sup Then
        ' appel du l'API SetPixelV pour modifier le point de coordonnées X et Y avec la 
'couleur Blanche
            SetPixelV Picture.hDC, x, y, vbWhite
'On peut changer la couleur à remplacer par des autres couleur (comme vbred pour 
'remplacer le point en rouge ....)(SetPixelV Picture.hDC, x, y, vbred). Aussi vous 
'pouvez utilisez des autres méthodes,' par exemple pour supprimer le point:
'SetPixelV Picture.hDC, x, y, (couleur_point - vbred)' mais dans ce cas faut enlever la
'condition if (If couleur_point = Couleur_Sup Then) ;)
        End If
    Next y
Next x
End Sub

' a mettre dans un form
Private Sub Command1_Click(Index As Integer)
' vous pouvez ajouter des autres couleurs à supprimer ou à modifier en remplaçant 
'le code de la couleur par un autre (ici vbred, vbblack..) ou bien directement le code de la couleur 
'(ex: SupCouleur Picture1, 255 ' pour supprimer le rouge).Vous pouvez aussi
'utilisez des autres méthodes d'appel de fonction, ici très simple avec select case
         Select Case Index
                  Case 0 ' Bouton Rouge
                  SupCouleur Picture1, vbRed
                  Case 1 ' Bouton vert
                  SupCouleur Picture1, vbGreen
                  Case 2 ' Bouton Bleue
                  SupCouleur Picture1, vbBlue
                  Case 3 ' Bouton Jaune
                  SupCouleur Picture1, vbYellow
                  Case Else ' Bouton Noir
                  SupCouleur Picture1, vbBlack
         End Select
End Sub
'**********************
Private Sub Form_Load()
' Charger l'image dans Picturebox
Picture1.Picture = LoadPicture(App.Path & "\couleurs.bmp")

' Changer la propriété ScaleMode de l'image en Pixel
Picture1.ScaleMode = 3
End Sub

Conclusion :


J'espère que c'est facile à comprendre, vous pouvez améliorer le code et l'utilisez dans des autres applications.
On peut ajouter des autres arguments pour la fonction SupCouleur, par exemple on ajoute la couleur remplaçante ...
Bon courage...

A voir également

Ajouter un commentaire

Commentaires

Messages postés
150
Date d'inscription
jeudi 20 mars 2003
Statut
Membre
Dernière intervention
8 janvier 2008

lol lol, je n'ai jamais dis que setpixel et getpixel sont les tops des Api, j'ai bien dis simple exemple efficace ;) pour les débutants surtout en api.
Pour les types des images, généralement les logiciels qui traitent les images ( comme illustrator, adobe photo shop ....) font décompression de l'image chaque chargement, après le compresser de nouveau pour réduire la taille;) , Car, manipuler les images (bmp) c'est beaucoup très efficace et puissance qu'un autre type d'image (comme jpg...) ;)
bon!, Si t'as un code qui peut faire la même chose avec le type jpg (bien sur avec la même qualité ;) et la rapidité de bmp) ça me ferai plaisir de le voir ;)
a++++
Messages postés
340
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
25 août 2007

ben GetPixel et SetPixel c pas le top c clair tout depend de si tu travail avec des images 256 couleurs ou plus si tu prend du 24 bit c normal que ce soit plus long sur de grosses images par contre si tu bosse sur des images 256 couleurs regarde ma source sur les palettes ca pourrait t'aider :)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.