SetPixelV - Modification des couleurs d'une image dans une PictureBox [Résolu]

Cjvg 330 Messages postés mercredi 6 décembre 2000Date d'inscription 26 octobre 2017 Dernière intervention - 25 févr. 2012 à 12:30 - Dernière réponse : ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention
- 25 févr. 2012 à 17:52
Bonjour

Cette procédure a fonctionné correctement. L'instruction SetPixelV (Ou Setpixel) ne marche plus ?

'-----------------------------------------------------------------------------------'
' '
' Remplace une ou plusieurs Couleurs par une Autre '
' '
'-----------------------------------------------------------------------------------'
Sub ReplaceCoul(Picture As PictureBox)
Dim CouleurLu As String
Dim OldCouleur As String
Dim NewCouleur As Long

OldCouleur = " " & NAM.Text4(1).Text & " " ' Liste des Couleurs à remplacer .
NewCouleur = Val(NAM.Text4(0).Text) ' Couleur de remplacement .
Picture.ScaleMode = 1

For I1 = 0 To Picture.ScaleWidth
NAM.Label10.Caption = I1 & "/" & Picture.ScaleWidth
DoEvents

For I2 = 0 To Picture.ScaleHeight
CouleurLu = " " & GetPixel(Picture.hdc, I1, I2) & " "
If InStr(OldCouleur, CouleurLu) > 0 Then
SetPixelV Picture.hdc, I1, I2, NewCouleur
Picture.Refresh
End If
Next I2
Next I1

Picture.Refresh
NAM.Label10.Caption = "Remplacer"

End Sub



Si vous avez la réponse .....


Par avance merci
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Cjvg 330 Messages postés mercredi 6 décembre 2000Date d'inscription 26 octobre 2017 Dernière intervention - 25 févr. 2012 à 16:12
3
Merci
Je viens de trouver l'erreur

La propriété de la PictureBox AutoReDraw était à False

Avec AutoReDraw = True
, Le Source joint à ma question fonctionne maintenant correctement.

PS: Retirer l'instruction Picture.refresh après le SetPixelV pour éviter que le programme se traîne.


Merci encore

Désolé pour le dérangement.

Merci Cjvg 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de Cjvg
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 25 févr. 2012 à 12:45
0
Merci
Bonjour,
Ta question en appelle au moins deux autres :
1) Où est ta fonction SetPixelV et que contient-elle ?
2) es-tu certain de développer sous VB6 (la présente section du forum) ?

et une observation :
- Appeler Picture (mot réservé sous VB6) un objet est pour le moins étonnant.

Tu pourrais peut-être faire un petit tour sur les sources déposés par mon "frère jumeau" jmfmarques. Il est probable que tu y trouveras ce que tu cherches.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Cjvg 330 Messages postés mercredi 6 décembre 2000Date d'inscription 26 octobre 2017 Dernière intervention - 25 févr. 2012 à 12:57
0
Merci
Comme cela est dit dans ma question: Cette procédure a fonctionné correctement


Dans le même Module


Public Declare Function SetPixelV Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Byte
Public Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Public Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Public Declare Function GetCursorPos Lib "user32" (lpPoint As PointAPI) As Long
Commenter la réponse de Cjvg
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 25 févr. 2012 à 13:15
0
Merci
Je ne vois rien d'autre à ajouter à ce que je t'ai dit, sauf, peut-être :
- répéter que tu devrais éviter le mot Picture
- typer I1 et I2
- que s'il s'agit de remplacer une couleur exacte, SetPixel sera recommandé
- que la fonction GetLastError de l'Api de Windows est à utiliser pour y voir clair.
Le fait que
Cette procédure a fonctionné correctement.
ne révèle rien de concret, ni de précis.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Cjvg 330 Messages postés mercredi 6 décembre 2000Date d'inscription 26 octobre 2017 Dernière intervention - 25 févr. 2012 à 15:14
0
Merci
- I1 et I2 sont déclarés Integer dans le module.

- J'ai remplacé Picture par PicImage

- J'ai remplacé SetPixelV par SetPixel

- j'ai rajouté la fonction GetLastError

- J'ai regardé et téléchargé plusieurs Projets du jumeau comme par exemple les dégradés de couleur....(mais aucune source ne traite ce sujet)

--------------------------------------------------------------
Setpixel ne change toujours pas la couleur de l'image

Avant de poser une question, je fais toujours des recherches sur Internet.(Pour ce sujet, Beaucoup de question sur Setpixel qui ne marche pas)

A priori, mon code semble correct

Merci quand même
Commenter la réponse de Cjvg
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 25 févr. 2012 à 16:26
0
Merci
Je ne sais pas comment tu as cherché parmi mes sources (mais sous le pseudo jmfmarques).
L'analyse du bout de code que tu montres donne à penser que, dans un contrôle picturebox, tu veux remplacer une couleur par une autre. Si tel est bien le cas, l'un de mes sources montre comment le faire, tant par effet "rouleau" (pour les pixels contigus dans cette couleur) que pour tous les pixels, contigus ou non, de cette couleur.
Tu verras que, dans un cas comme dans l'autre, je me sers de la même fonction de l'API de Windows, considérant simplement que des pixels isolés ne sont jamais rien d'autre que des aires également (et je traites des aires)
Voici le lien vers ce source :
Tapez le texte de l'url ici.
Mais en cherchant un peu plus, tu trouveras un autre source de moi (toujours sous le pseudo jmfmarques) qui, lui, va beaucoup plus loin en matière de transformation des images !
Celui-ci, par exemple :
Tapez le texte de l'url ici.
utilise la fonction SetPixel

Ces deux sources sont très très vieux (voilà bientôt 15 ans, en fait, que je les ai écrits). Ils ont été écrits à l'aide de VB5 !(raison pour laquelle tu y trouveras entre autres des fonctions "maison" pour faire ce que font déjà des fonctions de VB6, non existantes sous VB5.
Je les ai assortis d'un volume considérable de commentaires, pour en faciliter la compréhension, notamment pour ce qui est de l'utilisation des fonctions de l'Api de Windows.
Voilà
si tu ne trouves pas ton bonheur dans tout cela, je ne vois plus comment t'aider.

Je voudrais ajouter une chose : rien ne t'empêche de remplacer la fonction serpixel de l'Api de Windows par la méthode Pset de VB6 (elle te tend les bras).

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 25 févr. 2012 à 16:28
0
Merci
Bon.
Je vois ta réponse frappée pendant que je frappais la mienne.
Bon dimanche.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Cjvg 330 Messages postés mercredi 6 décembre 2000Date d'inscription 26 octobre 2017 Dernière intervention - 25 févr. 2012 à 17:20
0
Merci
J'ai oublié de mentionner qu'il faut également remplacer ScalMode = 1
par Picture.ScaleMode = 3
Commenter la réponse de Cjvg
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 25 févr. 2012 à 17:52
0
Merci
J'ai oublié de mentionner qu'il faut également remplacer ScalMode = 1
par Picture.ScaleMode = 3

Pas nécessairement.
Intéresse-toi aux méthodes ScaleX et ScaleY
Autres points d'intérêt :
propriétés
TwipsperPixelX et TwipsPerPixelY de l'objet Screen


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu

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.