Déplacer un morceau d'une image au format bmp

Résolu
zwarul Messages postés 35 Date d'inscription vendredi 4 février 2005 Statut Membre Dernière intervention 3 août 2008 - 5 août 2005 à 22:13
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

8 réponses

Utilisateur anonyme
5 août 2005 à 23:23
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.
3
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
5 août 2005 à 22:34
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
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
6 août 2005 à 06:53
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/
0
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 à 11:46
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....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
6 août 2005 à 11:50
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
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
6 août 2005 à 13:25
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/
0
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:50
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??
0
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
l'image peut aussi être du style:
0
Rejoignez-nous