bonjour,

je suis débutant en VB.net, je suis de toute façon un amateur, j'ai commencé avec du basic il y a 20 ans et j'ai essayé de suivre sur mon temps libre les évolutions... je programme de petits jeux pour mon propre usage.

Je dispose de VB express 2013 (car sous seven VB6 ne fonctionne plus ! )

Tout cela pour vous demander d'excuser les erreurs de terminologie que je vais probablement faire.

Je cherche à faire les opérations suivantes :
ouvrir dans une picture.box une image,
dessiner sur celle-ci,
la revoir telle quelle même si d'autres fenêtres viennent la cacher provisoirement ou si je la "scrolle",
puis recharger cette même image initiale pour faire un nouveau dessin et ainsi de suite plusieurs fois.
Ce n'est pas un travail "rapide" : l'image ne sera pas modifiée plusieurs fois par secondes, c'est une activité posée.

je veux que cette image reste affichée comme elle l'était dans "autoredraw" de VB6

j'ai fouillé et trouvé de solutions :

voici le code que j'ai essayé d'utiliser

un bouton lance ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Dim myBitmap1 As New Bitmap("C:\Users\Utilisateur...\image.JPG" 'Je crée un BitMap
Dim newgraphic1 As Graphics = Graphics.FromImage(myBitmap1) 'je crée un Graphics à partir du BitMap
newgraphic1.DrawEllipse(mypen, x,y, rayon1, rayon1) ' je dessine sur mon Graphics
picturebox.image= mybitmap1 'je mets dans une picturebox le résultat
newgrpahic1.dispose()' je ferme le graphics
je pensais alors pouvoir faire :
mais cela efface la picturebox. je comprends pas pourquoi la picturebox ne reste pas affichée, mais bon, j'admets que je ne comprends pas... Le problème est ailleurs :

Si je clique trop sur le bouton j'arrive à une saturation mémoire : je suppose que le système "créé" des bitmaps à chaque occurrence de "new" et que cela fini par faire "trop".


J'ai voulu alors mettre la déclaration Mybitmap1 un fois pour toute en dur (en "général" en introduction des lignes de programmes avec les variables générales du programme) et utiliser quelque chose comme :
(...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
mybitmap1.image= image.fromfile("c:\.............\image.jpg")
mais cela ne résout pas le problème de mémoire : la déclaration newgraphic1 est elle elle aussi "récurrente" et saturant la mémoire ? Je ne pensais pas mais peut être... ?


dernière idée qui m'est venu : sauvegarder mon image modifiée dans un fichier et la charger pour la voir.
Le problème est que je ne epux le faire qu'une fois : à la seconde tentative il refuse de l'écraser.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
Dim myBitmap1 As New Bitmap("C:\Users\Utilisateur...\image.JPG" 'Je crée un BitMap
Dim newgraphic1 As Graphics = Graphics.FromImage(myBitmap1) 'je crée un Graphics à partir du BitMap
newgraphic1.DrawEllipse(mypen, nux1 + l, nuy1 + l, rayon1, rayon1) ' je dessine sur mon Graphics
mybitmap.save ("c:\........\imagetransitoire") 'sauvegarder mon image sur un fichier à part
picturebox.image= image.fromfile("c:\........\imagetransitoire") 'je mets dans ma picturebox le fichier créé
file.delete("c:\........\imagetransitoire") 'détruire le fichier image provisoire sur le disque
newgrpahic1.dispose() ' je ferme le graphics
mybitmap1.dispose() 'fermer ainsi toutes les ressources graphiques en cours
cette manipulation ne marche pas : impossible d'effacer le fichier car "il est en cours d'utilisation" ...

Je ne sais pas comment (et quand) fermer ce fichier.


Comme vous le voyez, je me suis enfoncer bien loin dans des aspects complexes qui me dépassent surement : il doit certainement y avoir une méthode simple pour :

- charger une image
- la modifier et la laissée apparente
- pouvoir recharger au même endroit le fichier original et refaire l'opération
- sans saturer la mémoire.

Je cherche depuis 3 jours sur le net, j'ai essayé de parcourir ce forum, mais je n'ai plus d'idées et viens vous demander un petit coup de main !

je me décourage un peu, VB6 était plus souple pour les néophytes comme moi : VB.net semble nécessiter une plus grande compréhension de ses fondements profonds, si vous voyez ce que je veux dire !


Mille mercis d'avance.

William