Déplacer un morceau d'une image au format bmp [Résolu]

Messages postés
35
Date d'inscription
vendredi 4 février 2005
Statut
Membre
Dernière intervention
3 août 2008
- - Dernière réponse : zwarul
Messages postés
35
Date d'inscription
vendredi 4 février 2005
Statut
Membre
Dernière intervention
3 août 2008
- 6 août 2005 à 13:56
bon voila je cherche une fonction, ou un code, qui me permette de déplacer des pixels dans une image...

il s'agit d'une image blanche avec par exemple un cercle de couleur r:44 v:128 b:255

ce que je veu, c'est pouvoir par exemple déplacer mon cercle de 3 pixels sur la droite, et 5 pixels vers le bas; en gros c'est le principe que je cherche (le cercle peut etre une lettre un carré ou n'importe quoi mais ce sera toujours de la même couleur...) (de plus je veux déplacer le cercle pas en faire une copie et me retrouver avec dfeux cercles...)

ce serai génial si quelqu'un pouvait me donner un petit coup de pouce

merci
Afficher la suite 

8 réponses

Meilleure réponse
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
25
3
Merci
Bonjour,



Voilà ma solution :





Private Sub cmd1_Click()



pic1.ScaleMode = 3



Dim Bh As Integer, Bw As Integer

Bw = pic1.ScaleWidth

Bh = pic1.ScaleHeight



Dim SearchColor As Long, MaskColor As Long

SearchColor = RGB(0, 0, 0)

MaskColor = RGB(255, 255, 255)



Dim DecalX As Integer, DecalY As Integer

DecalX = 3

DecalY = 3



Dim PtsGraphics() As POINTAPI

Dim NbPt As Integer

NbPt = -1



Dim iX As Integer, iY As Integer

For iX = 0 To Bw

For iY = 0 To Bh

If pic1.Point(iX, iY) = SearchColor Then

NbPt = NbPt + 1

If NbPt > 0 Then ReDim Preserve PtsGraphics(NbPt) As POINTAPI

If NbPt = 0 Then ReDim PtsGraphics(0) As POINTAPI

PtsGraphics(NbPt).x = iX + DecalX

PtsGraphics(NbPt).y = iY + DecalY

pic1.PSet (iX, iY), MaskColor

End If

Next iY

Next iX



If NbPt > -1 Then

Dim iPt As Integer

For iPt = 0 To UBound(PtsGraphics)

pic1.PSet (PtsGraphics(iPt).x, PtsGraphics(iPt).y),SearchColor

Next iPt

End If





End Sub



ChRB
<hr size="2" width="100%">
Merci de cliquer sur "Réponse acceptée" si une réponse vous convient.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 212 internautes nous ont dit merci ce mois-ci

Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
19
0
Merci
faut l'effacer et la redessiner ailleurs, soit avec les dessins
graphiques cercle, ligne, etc .. soit avec PaintPicture à partir d'une
image dessinée ailleurs, ou alors avec les bitmaps.

il y a aussi la possibilité de prendre une shape ou une image ou même
une autre PictureBox, et se sera plus facile à déplacer sans la
redessiner à chaque fois.

Daniel
Messages postés
15815
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
83
0
Merci
Ouch, ta méthode est un peu lourde [auteurdetail.aspx?ID=231472 Charles Racaud], je conseillerai plutôt la méthode de [auteurdetail.aspx?ID=278023 Gobillot] qui sera bien plus légère et optimisée ! Il faut savoir que les fonction PSet et Point de VB sont tout sauf rapide !


Je rajoute de plus : tracer un cercle dans un DC temporaire, et
utiliser TransparentBlt pour le tracer sur l'image de destination.


DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
Messages postés
35
Date d'inscription
vendredi 4 février 2005
Statut
Membre
Dernière intervention
3 août 2008
0
Merci
salut en fait c'est plutot la méthode de charles qui me convient car le motif a déplacer n'est pas forcément un cercle ce peut etre n'importe quoi....
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
19
0
Merci
je comprends pas.

si tu mets ton image dans une autre PictureBox tu la déplaces en une seule instruction:

Picture2 dans picture1:

Picture2.move Picture2.Left + decalX, Picture2.Top + decalY

et sans perdre aucun pixels


Daniel
Messages postés
15815
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
83
0
Merci
Ben oui, et ca marche également avec un TransparentBlt.



Avec les PSet et Point, tu y perds vraiment beaucoup en temps
processeur car les calculs sont assez long à faire ! A la limite,
utilise au moins les API GetPixel/SetPixel, ou encore mieux, utilise ma
classe de gestion d'image pour accèlérer le traitement !

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
Messages postés
35
Date d'inscription
vendredi 4 février 2005
Statut
Membre
Dernière intervention
3 août 2008
0
Merci
en fait ce que je veux c'est ne déplacer que les pixels d'une certaine couleur
par exemple ici je veux faire descendre le graphique noir sous le graphique bleu sans que le graph bleu ne bouge dans l'image......

et avec le code de chrb ca marche nikel
mais je n'arrive pas à faire fonctionner avec ce que vous m'avez indiqué en dessous...c'est parceque je mi prend mal ou c'est parceque c'est pas prévu pour faire ce que je voulais??
Messages postés
35
Date d'inscription
vendredi 4 février 2005
Statut
Membre
Dernière intervention
3 août 2008
0
Merci
l'image peut aussi être du style: