Image gommée par une autre appli

Résolu
Bernardo769 Messages postés 18 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 9 août 2012 - 6 mai 2010 à 10:28
Bernardo769 Messages postés 18 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 9 août 2012 - 11 mai 2010 à 09:08
Bonjour,

Je construis une image dans un PictureBox avec le code suivant (VB2008Express) :

Dim graphic As Graphics = Image.CreateGraphics()
...

MonStylo.Color = Couleur(Ind_Color) ' Tableau de couleurs
graphic.DrawEllipse(MonStylo, X, Y, D, D)

MonPinceau.Dispose()
MonPinceau = New SolidBrush(xxxxx)
graphic.FillEllipse(MonPinceau, X, Y, D, D)

Si je reste sur mon appli, l'image est OK.
Mais lorsque je bascule sur une appli pour ensuite revenir mon appli sur laquelle j'ai mon image, celle-ci a été effacée (éventuellement partiellement), comme si l'appli sur laquelle j'avais basculée avait joué le rôle de gomme.

Comment peut-on figer l'image une fois construite?
Mes recherches sont restées pour l'instant infructueuses.

Merci d'avance
Olivier

6 réponses

Utilisateur anonyme
9 mai 2010 à 22:31
bonsoir,
il est plus simple de dessiner sur une bitmap puis de la charger ensuite dans le controle.
de plus, cette bitmap peut etre sauvée facilement sur le disque.
        'création d'un nouveau bitmap
        Dim b As Bitmap = New Bitmap(200, 200)
        'création de l'outil de dessin
        Dim graphic As Graphics = Graphics.FromImage(b)
        'dessin sur le bitmap
        graphic.DrawEllipse(New Pen(Color.DarkMagenta), 10, 10, 70, 80)
        'sauvegarde du bitmap
        b.Save(Application.StartupPath & "\test.bmp", Imaging.ImageFormat.Bmp)
        'envoi au picturebox
        PictureBox1.Image = b.Clone
        'libération des ressources
        graphic.Dispose()
        b.Dispose()
3
Bernardo769 Messages postés 18 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 9 août 2012
8 mai 2010 à 18:20
En fait, voilà ce qui se passe :

http://bernard.o.perso.neuf.fr/BugXPSP3.jpg

Le phénomène se passe sur un poste XP mais ça fonctionne correctement en Vista...

A l'aide...
0
Bernardo769 Messages postés 18 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 9 août 2012
9 mai 2010 à 14:35
Bonjour à tous,

Pour vous aider à m'aider, voici la suite du problème :

Dim graphic As Graphics = MonPictureBox.CreateGraphics()
graphic.Clear(Color.White)
graphic.DrawLine(MonStylo, 220, 10, 220, 440)
graphic.DrawLine(MonStylo, 10, 220, 440, 220)

Boucle sur :
MonStylo.Color = CZ_Couleur(Ind_Color)
graphic.DrawEllipse(MonStylo, X, Y, D, D)
graphic.FillEllipse(MonPinceau, X, Y, D, D)
graphic.Flush() ' Pas sur que ça serve à quelque chose...

Faut pas croire, j'ai cherché une solution en copiant l'image du PictureBox dans une image BitMap.
http://msdn.microsoft.com/fr-fr/library/ktx83wah%28v=VS.100%29.aspx

Dim MonBitmap As New Bitmap(450, 450)
MonBitmap = MonPictureBox.Image
If Not (MonBitmap Is Nothing) Then
MonBitmap.Save("C:\Essai.bmp")
Else
MsgBox("Pas d'image :-(")
End If

Le problème est que MonBitMap est vide. Je ne sais pas comment :
* Etape 1 : Copier le l'image du PictureBox
* Etape 2 : sauvegarder cette image dans un fichier

Si quelqu'un pouvait se pencher sur mon problème... Merci d'avance
Olivier
0
Bernardo769 Messages postés 18 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 9 août 2012
10 mai 2010 à 08:08
Bonjour,

Merci pour cette aide précieuse. Je viens de tester, et ça marche .

Juste une petite remarque : je trouvais sympa de voir l'image se construire au fur et à mesure de l'itération de ma boucle. Avec cette nouvelle méthode, le résultat apparait à la fin uniquement. J'ai essayé de mettre le "PictureBox1.Image = b.Clone" dans la boucle mais cela ne change rien. Dommage.

A+
Olivier
0

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

Posez votre question
Utilisateur anonyme
10 mai 2010 à 13:40
on peut aussi se servir de l'événement Paint du picturebox afin de dessiner dessus à chaque rafraichissement du contrôle. de cette façon, on le verra se dessiner en temps réel.

    Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
        Dim graphic As Graphics = e.Graphics
        graphic.DrawEllipse(New Pen(Color.DarkMagenta), 10, 10, 70, 80)
    End Sub


a bientôt.
0
Bernardo769 Messages postés 18 Date d'inscription mercredi 13 janvier 2010 Statut Membre Dernière intervention 9 août 2012
11 mai 2010 à 09:08
Bonjour,

Suite à un premier test, je ne suis pas sûr que cette option me convienne. Je regarderai cela un peu plus tard. Je vais me concentrer sur le coeur de mon appli...

Merci
A+
Olivier
0
Rejoignez-nous