Je suis en train de peaufiner une classe dérivée de PrintDocument, dont le
but est d'imprimer les fiches d'informations de plantes avec images. Dans la
méthode OnPrintPage j'ai pensé lire une table temporaire qui contient les
enregistrements sélectionnés pour l'impression, et pour imprimer chaque page
une à la fois, je compte utiliser une boucle For.
Pour charger l'image pour chaque fiche, je lirai le chemin d'accès (relatif
ou absolu, c'est à déterminer) dans la ligne
' Dans la boucle For
...
magePlante = System.Drawing.Image.FromFile(path)
...
...
Mais je me suis rendu compte qu'une image chargée à partir d'un fichier ne
se décharge qu'en appelant le .Dispose(). Cela veut-il dire que je ne
pourrai pas appeler la ligne ci-dessus pour charger l'image suivante?
Dois-je procéder autrement (par exemple avec une imagelist ou autre)?
En fait, je me demande s'il y a des dangers à laisser des fichiers d'images
ouverts (et par conséquent verrouillés??) lorsqu'on charge une première
image en faisant monImage = image.FromFile("fichier1.jpg") et qu'ensuite on
fasse monImage = image.FromFile("fichier2.jpg"). La première image est-elle
fermée automatiquement? Y a-t-il récupération de la mémoire? J'espère que
c'est mieux comme ça...!??
Merci de bien vouloir éclairer ma lanterne, en espérant avoir posté
clairement et au bon endroit.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Anne DeBlois
Je suis en train d'explorer la piste FromStream - code bidon à tester: ------------------ Dim imageBidon As Image Dim imageBidonStream As System.IO.Stream ' Dans la boucle For ... imageBidonStream = System.IO.File.OpenRead("print.gif") imageBidon = Image.FromStream(imageBidonStream) e.Graphics.DrawImage(imageBidon, Me.margeGauche, Me.margeHaute) imageBidonStream.Close() ' Et ensuite je mets le reste du code dans la boucle For pour revenir avec ' la fiche suivante à imprimer, en donnant le nom de fichier de l'image suivante --------------------------
Apparemment ça fonctionne pour une page unique, y aurait-il des contre-indications pour plus d'une fiche à imprimer? Ai-je oublier des détails? Merci à l'avance,
ANNE DEBLOIS
Je suis en train d'explorer la piste FromStream - code bidon à tester:
------------------
Dim imageBidon As Image
Dim imageBidonStream As System.IO.Stream
' Dans la boucle For
...
imageBidonStream = System.IO.File.OpenRead("print.gif")
imageBidon = Image.FromStream(imageBidonStream)
e.Graphics.DrawImage(imageBidon, Me.margeGauche, Me.margeHaute)
imageBidonStream.Close()
' Et ensuite je mets le reste du code dans la boucle For pour revenir avec
' la fiche suivante à imprimer, en donnant le nom de fichier de l'image
suivante
--------------------------
Apparemment ça fonctionne pour une page unique, y aurait-il des
contre-indications pour plus d'une fiche à imprimer? Ai-je oublier des
détails? Merci à l'avance,
Je suis en train d'explorer la piste FromStream - code bidon à tester: ------------------ Dim imageBidon As Image Dim imageBidonStream As System.IO.Stream ' Dans la boucle For ... imageBidonStream = System.IO.File.OpenRead("print.gif") imageBidon = Image.FromStream(imageBidonStream) e.Graphics.DrawImage(imageBidon, Me.margeGauche, Me.margeHaute) imageBidonStream.Close() ' Et ensuite je mets le reste du code dans la boucle For pour revenir avec ' la fiche suivante à imprimer, en donnant le nom de fichier de l'image suivante --------------------------
Apparemment ça fonctionne pour une page unique, y aurait-il des contre-indications pour plus d'une fiche à imprimer? Ai-je oublier des détails? Merci à l'avance,
ANNE DEBLOIS
Anne DeBlois
Problème résolu, avec un imageBidon.Dispose() au sortir de la boucle For.
Problème résolu, avec un imageBidon.Dispose() au sortir de la boucle For.
Problème résolu, avec un imageBidon.Dispose() au sortir de la boucle For.
Patrice
Pour ma part, je ne vois pas quel est le problème que tu cherches à contourner par rapport à la méthode précédente.
A priori tu fais un dispose sur une image pour la libérer mais la ligne que tu indiques crée de toute façon une toute nouvelle image. Je ne vois en quoi l'appel du dispose serait gênant (ce qui te gène est que c'est la même variable ? attention à ne pas confondre la variable qui représente ton objet et l'objet lui même qui sera un autre object, en gros une variable object est un pointeur, c'est donc la même variable mais elle "pointera" vers un objet qui n'a rien à voir avec celui sur lequel tu a appelé "dispose")...
Avais tu essayé ? Si oui, qu'est ce qui ne marchais pas ? Si non, essaye ta première idée avant de chercher à contourner qun problème qui n'existe peut-être pas...
-- Patrice
"Anne DeBlois" a écrit dans le message de news:
Je suis en train d'explorer la piste FromStream - code bidon à tester: ------------------ Dim imageBidon As Image Dim imageBidonStream As System.IO.Stream ' Dans la boucle For ... imageBidonStream = System.IO.File.OpenRead("print.gif") imageBidon = Image.FromStream(imageBidonStream) e.Graphics.DrawImage(imageBidon, Me.margeGauche, Me.margeHaute) imageBidonStream.Close() ' Et ensuite je mets le reste du code dans la boucle For pour revenir avec ' la fiche suivante à imprimer, en donnant le nom de fichier de l'image suivante --------------------------
Apparemment ça fonctionne pour une page unique, y aurait-il des contre-indications pour plus d'une fiche à imprimer? Ai-je oublier des détails? Merci à l'avance,
ANNE DEBLOIS
Pour ma part, je ne vois pas quel est le problème que tu cherches à
contourner par rapport à la méthode précédente.
A priori tu fais un dispose sur une image pour la libérer mais la ligne que
tu indiques crée de toute façon une toute nouvelle image. Je ne vois en quoi
l'appel du dispose serait gênant (ce qui te gène est que c'est la même
variable ? attention à ne pas confondre la variable qui représente ton objet
et l'objet lui même qui sera un autre object, en gros une variable object
est un pointeur, c'est donc la même variable mais elle "pointera" vers un
objet qui n'a rien à voir avec celui sur lequel tu a appelé "dispose")...
Avais tu essayé ? Si oui, qu'est ce qui ne marchais pas ? Si non, essaye ta
première idée avant de chercher à contourner qun problème qui n'existe
peut-être pas...
--
Patrice
"Anne DeBlois" <annedeblois@community.nospam> a écrit dans le message de
news: eeBZS5r8GHA.2316@TK2MSFTNGP04.phx.gbl...
Je suis en train d'explorer la piste FromStream - code bidon à tester:
------------------
Dim imageBidon As Image
Dim imageBidonStream As System.IO.Stream
' Dans la boucle For
...
imageBidonStream = System.IO.File.OpenRead("print.gif")
imageBidon = Image.FromStream(imageBidonStream)
e.Graphics.DrawImage(imageBidon, Me.margeGauche, Me.margeHaute)
imageBidonStream.Close()
' Et ensuite je mets le reste du code dans la boucle For pour revenir avec
' la fiche suivante à imprimer, en donnant le nom de fichier de l'image
suivante
--------------------------
Apparemment ça fonctionne pour une page unique, y aurait-il des
contre-indications pour plus d'une fiche à imprimer? Ai-je oublier des
détails? Merci à l'avance,
Pour ma part, je ne vois pas quel est le problème que tu cherches à contourner par rapport à la méthode précédente.
A priori tu fais un dispose sur une image pour la libérer mais la ligne que tu indiques crée de toute façon une toute nouvelle image. Je ne vois en quoi l'appel du dispose serait gênant (ce qui te gène est que c'est la même variable ? attention à ne pas confondre la variable qui représente ton objet et l'objet lui même qui sera un autre object, en gros une variable object est un pointeur, c'est donc la même variable mais elle "pointera" vers un objet qui n'a rien à voir avec celui sur lequel tu a appelé "dispose")...
Avais tu essayé ? Si oui, qu'est ce qui ne marchais pas ? Si non, essaye ta première idée avant de chercher à contourner qun problème qui n'existe peut-être pas...
-- Patrice
"Anne DeBlois" a écrit dans le message de news:
Je suis en train d'explorer la piste FromStream - code bidon à tester: ------------------ Dim imageBidon As Image Dim imageBidonStream As System.IO.Stream ' Dans la boucle For ... imageBidonStream = System.IO.File.OpenRead("print.gif") imageBidon = Image.FromStream(imageBidonStream) e.Graphics.DrawImage(imageBidon, Me.margeGauche, Me.margeHaute) imageBidonStream.Close() ' Et ensuite je mets le reste du code dans la boucle For pour revenir avec ' la fiche suivante à imprimer, en donnant le nom de fichier de l'image suivante --------------------------
Apparemment ça fonctionne pour une page unique, y aurait-il des contre-indications pour plus d'une fiche à imprimer? Ai-je oublier des détails? Merci à l'avance,