Meilleure methode pour afficher une forme sur une image

Résolu
cs_vincnet68 Messages postés 100 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 24 mai 2013 - 4 janv. 2010 à 12:05
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 5 janv. 2010 à 14:58
Bonjour,

Je souhaite afficher une forme (cercle ou rectangle) sur une image.
L'affichage ou pas de la forme m'est donné par une connexion réseau.

Quelle est la meilleur méthode pour afficher cette forme ?

Merci de votre aide

Vincnet68

14 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
4 janv. 2010 à 16:36
Vu que tu utilises l'event _Paint,
pas besoin de faire un DrawRectangle dans ton Button2_Click

de plus, n'utilises pas :
Me.PictureBox1.CreateGraphic
utilises celui qui t'es fournit en parametre:
e.Graphics

au final, j'ai placé trois checkBoxes qui permettent d'afficher/masquer un rectangle :
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        PictureBox1.ImageLocation = "C:\...\...jpg"
    End Sub

    Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
        If CheckBox1.Checked Then
            e.Graphics.DrawRectangle(Pens.Red, 0, 0, 20, 20)
        End If
        If CheckBox2.Checked Then
            e.Graphics.DrawRectangle(Pens.Green, 40, 0, 20, 20)
        End If
        If CheckBox3.Checked Then
            e.Graphics.DrawRectangle(Pens.Blue, 80, 0, 20, 20)
        End If
    End Sub

    Private Sub CheckBox_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged, CheckBox2.CheckedChanged, CheckBox3.CheckedChanged
        PictureBox1.Invalidate()
    End Sub



Renfield - Admin CodeS-SourceS - MVP Visual Basic
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
4 janv. 2010 à 12:45
"Meilleure", c'est selon les contraintes que tu as...

mais pour dessiner un cercle :

msdn.microsoft.com/fr-fr/library/system.drawing.graphics.drawellipse(VS.80).aspx

et un rectangle:

msdn.microsoft.com/fr-fr/library/system.drawing.graphics.drawrectangle(VS.80).aspx

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
cs_vincnet68 Messages postés 100 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 24 mai 2013 1
4 janv. 2010 à 13:50
Salut Renfield,

Cette fonction (apparemment) ne peux être utilisé que sur un évenement "draw" d'un contrôle.

Mon but est de créer des objets forme lors du l'initialisation du programme que je peux rendre visible ou non par la suite.

Merci de ton aide.

Vincnet68
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
4 janv. 2010 à 14:05
Au pire, tu dessine, quand tu veux le supprimer, tu effaces et ne le redessine pas ^^


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0

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

Posez votre question
cs_vincnet68 Messages postés 100 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 24 mai 2013 1
4 janv. 2010 à 14:33
J'ai 64 éléments à afficher/enlever de manière totalement asynchrone. Ca ne vas pas être un peu lourd (et lent) de parcourir les 64 éléments ?

Merci.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
4 janv. 2010 à 14:39
au contraire, ca me semble plus ideal.

a voir ce que sotn ces elements exactement, mais c'est toujours moins long de dessiner que de s'amuser a allourdir la form avec 64 controles que windows et le framework devront gérer de manière plus lourde


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
cs_vincnet68 Messages postés 100 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 24 mai 2013 1
4 janv. 2010 à 16:06
J'ai un phénomène bizzare. Il arrive que lorsque je dessine un rectangle il disparaisse aussitôt.
Pourtant je redessine tous mes rectangle sur l'évènement "paint".

Peux-tu m'aider

Merci


Vincnet68
0
cs_vincnet68 Messages postés 100 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 24 mai 2013 1
4 janv. 2010 à 16:19
Voilà le code
 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Me.PictureBox1.CreateGraphics.Clear(Color.White)
        Me.PictureBox1.Image = System.Drawing.Image.FromFile(Application.StartupPath & "" & "PC030001-2.jpg")
  Me.PictureBox1.CreateGraphics.DrawRectangle(Shape.Couleur, Shape.Localisation)
    End Sub

    Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
      Me.PictureBox1.CreateGraphics.DrawRectangle(Shape.Couleur, Shape.Localisation)
    End Sub


Je ne comprends pas.

Merci @+
0
cs_vincnet68 Messages postés 100 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 24 mai 2013 1
4 janv. 2010 à 16:53
Nickel, Merci beaucoup.

Ca fonctionne à merveille.

Je pourrais dormir tranquillement (lol)

@+

Vincnet68
0
cs_vincnet68 Messages postés 100 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 24 mai 2013 1
5 janv. 2010 à 14:29
Salut Renfield,

J'ai un petit soucis, j'ai l'impression que mon programme pas sans arrêt dans l'évènement Paint de PictureBox.

Et je n'ai que 16 rectangles (j'en aurai plus de 64 au final)

As-tu une solution ?

Merci

@+

Vincnet68
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
5 janv. 2010 à 14:32
a voir si tu ne provoque pas ce refresh...

quel est ton code ?

(simple a voir en breakpoint en regardant la callstack )

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
cs_vincnet68 Messages postés 100 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 24 mai 2013 1
5 janv. 2010 à 14:34
Pour être plus exact, il passe 39 fois dans l'évènement pas seconde (vite mesuré)
0
cs_vincnet68 Messages postés 100 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 24 mai 2013 1
5 janv. 2010 à 14:36
Voilà mon code
Private Sub DrawShapes(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
        lblTest.Text = CInt(lblTest.Text) + 1
        Dim camera As ISDisplay_Host
        For Each camera In Me.Cameras
            Dim Shape As ShapeDisplay
            For Each Shape In camera.Shapes
                If Shape.Visible Then
                    e.Graphics.DrawRectangle(Shape.Couleur, Shape.Localisation)
                End If
            Next
        Next
    End Sub
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
5 janv. 2010 à 14:58
le plus simple pour 'non pas savoir la cause' mais 'tenter de comprendre' est d'ajouter :

Debug.Print Date.Now

ainsi, tu aura dans la fenetre de sortie l'heure de chaque refresh.

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Rejoignez-nous