Image gommée par une autre appli [Résolu]

Bernardo769 18 Messages postés mercredi 13 janvier 2010Date d'inscription 9 août 2012 Dernière intervention - 6 mai 2010 à 10:28 - Dernière réponse : Bernardo769 18 Messages postés mercredi 13 janvier 2010Date d'inscription 9 août 2012 Dernière intervention
- 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
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Utilisateur anonyme - 9 mai 2010 à 22:31
3
Merci
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()

Merci Utilisateur anonyme 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
Bernardo769 18 Messages postés mercredi 13 janvier 2010Date d'inscription 9 août 2012 Dernière intervention - 8 mai 2010 à 18:20
0
Merci
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...
Commenter la réponse de Bernardo769
Bernardo769 18 Messages postés mercredi 13 janvier 2010Date d'inscription 9 août 2012 Dernière intervention - 9 mai 2010 à 14:35
0
Merci
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
Commenter la réponse de Bernardo769
Bernardo769 18 Messages postés mercredi 13 janvier 2010Date d'inscription 9 août 2012 Dernière intervention - 10 mai 2010 à 08:08
0
Merci
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
Commenter la réponse de Bernardo769
Utilisateur anonyme - 10 mai 2010 à 13:40
0
Merci
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.
Commenter la réponse de Utilisateur anonyme
Bernardo769 18 Messages postés mercredi 13 janvier 2010Date d'inscription 9 août 2012 Dernière intervention - 11 mai 2010 à 09:08
0
Merci
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
Commenter la réponse de Bernardo769

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.