Pot de peinture vb.net

jarod43 Messages postés 7 Date d'inscription mardi 20 juin 2006 Statut Membre Dernière intervention 17 juillet 2008 - 17 juil. 2008 à 14:16
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 17 juil. 2008 à 18:52
Bonjour, je suis à la recherche d'une fonction en vb.net qui permette de faire la même action que le pot de peinture de paint. C'est à dire pouvoir sélectionner automatiquement une zone de même couleur d'une image et pouvoir remplacer cette couleur par une autre.

Quelqu'un a t'il déjà eu le problème et si oui avez vous trouvé des solutions en .net car j'en trouve pas.

J'ai absolument besoin de cette fonction pour finir mon projet.

Merci d'avance de vos réponses.

9 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 juil. 2008 à 14:47
question récurrente (cf moteur de recherche)

API (GDI32)
FloodFill ou ExtFloodFill
0
jarod43 Messages postés 7 Date d'inscription mardi 20 juin 2006 Statut Membre Dernière intervention 17 juillet 2008
17 juil. 2008 à 14:52
Bonjour, merci pour ta réponse j'ai bien trouvé ceci là dessus mais je ne sais pas comment utliser extfloodfill, pourrais tu m'aider stp.

Merci d'avance de ta réponse
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 juil. 2008 à 15:04
0
jarod43 Messages postés 7 Date d'inscription mardi 20 juin 2006 Statut Membre Dernière intervention 17 juillet 2008
17 juil. 2008 à 15:17
merci pour la réponse encore mais comment intégrer déjà extfloodfill à vb.net car déjà vb.net ne reconnait pas hdc (je ne sais pas ce que c'est sincèrement) et la fonction extfloodfill.

Je suis un peu perdu là même ;en lisant la fiche que tu m'as donné.
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 74
17 juil. 2008 à 15:37
c'est de l'adaptation BASIQUE d'API en .NET (changement de types)

tout est documenté :
http://msdn.microsoft.com/en-us/library/ms532339(VS.85).aspx

la seule astuce a trouver :
Dim hDc As IntPtr = PictureBox1.CreateGraphics.GetHdc

Public Class Form1
Private Declare Function CreateSolidBrush Lib "gdi32.dll" (ByVal crColor As Integer) As IntPtr
Private Declare Function DeleteObject Lib "gdi32.dll" (ByVal hObject As IntPtr) As Integer
Private Declare Function ExtFloodFill Lib "gdi32" (ByVal hdc As IntPtr, ByVal nXStart As Integer, ByVal nYStart As Integer, ByVal crColor As Integer, ByVal fuFillType As Integer) As Integer
Private Declare Function SelectObject Lib "gdi32.dll" (ByVal hdc As IntPtr, ByVal hObject As IntPtr) As IntPtr

Private Const FLOODFILLSURFACE As Integer = 1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim oGr As Graphics = PictureBox1.CreateGraphics
oGr.DrawEllipse(Pens.Black, 20, 20, 200, 200)
End Sub

Private Sub PictureBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown
Dim hBrush As IntPtr
Dim hDc As IntPtr = PictureBox1.CreateGraphics.GetHdc
hBrush = CreateSolidBrush(&HFF)
hBrush = SelectObject(hDc, hBrush)
ExtFloodFill(hDc, e.X, e.Y, &HFFFFFF, FLOODFILLSURFACE)
DeleteObject(SelectObject(hDc, hBrush))
End Sub
End Class
0
jarod43 Messages postés 7 Date d'inscription mardi 20 juin 2006 Statut Membre Dernière intervention 17 juillet 2008
17 juil. 2008 à 16:18
Merci cela fonctionne bien c'est exactement ce que je voulais, par contre peux tu me dire stp comment trouver tous les codes couleur car là ça me rempli en rouge.

Deuxième question lorsque je clique 2 fois sur mon image j'ai un message du type :

Une exception non gérée du type 'System.InvalidOperationException' s'est produite dans system.drawing.dll


Informations supplémentaires : L'objet est actuellement utilisé ailleurs.

comment ça ce fait et comment pallier à ce problème ?

Merci encore
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 juil. 2008 à 16:23
c'est du bête RGB :
hBrush = CreateSolidBrush(&HFF)
255=> ROUGE

retesté en cliquant partout, plusieurs fois....
pas de levée d'exception comme celle-ci
0
jarod43 Messages postés 7 Date d'inscription mardi 20 juin 2006 Statut Membre Dernière intervention 17 juillet 2008
17 juil. 2008 à 17:17
je sais pas en fait mon application est un peu complexe, après le remplissage je change l'image de ma picturebox par une autre et je pense que c'est là où j'ai l'exception : comment puis je gérer ceci en libérant l'utlisation du fichier image.

J'espère avoir été assez clair

Mais sinon encore merci je fait un grand bon en vb net grace à toi lol
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
17 juil. 2008 à 18:52
pas très clair...

tu aurais du code a soumettre ?
0
Rejoignez-nous