[.NET] Objet Graphics, DrawImage et occupation mémoire

Objet Graphics, DrawImage et occupation mémoire [.NET] - C#/.NET managed - Programmation

Marsh Posté le 25-07-2006 à 09:35:44    

Salut,
 
Je suis sous Windows Vista, et le module de slideshow de base est null à mourrir : 640x480, sur mon 24" wide, c'est hideux.
Du coup, hier j'ai voulu en écrire un, qui accepte de tourner en 1920x1200
 
Bon, hormi quelques détails, il marche bien.
 
Seulement, à chaque fois que je fais un g.DrawImage() l'occupation mémoire monte, et ne redescent jamais, même si j'affiche plusieurs fois de suite la même image (donc il ne s'agit pas d'un cache).
 
=> Je suppose que l'objet Graphics conserve en mémoire tous les objets Image qui ont été dessinés dedans. Comment faire pour "applatir l'image", c'est à dire travailler sur un canevas qui ne conserve pas les images en mémoire, mais simplement écrase les pixels dans une zone mémoire ?
 
J'ai toujours la solution de faire comme le truc de Vista, à savoir effacer au fur et à mesure les images du dessous, mais bon, je ne vois pas trop l'intérêt... Je voudrais donc simplement faire en sorte que mon Graphics ne contiene qu'une image à la fois, et écrase les occurences précédentes sans pour autant les effacer.

Reply

Marsh Posté le 25-07-2006 à 09:35:44   

Reply

Marsh Posté le 25-07-2006 à 09:38:24    

Sinon, j'ai un autre problème : lorsque je recherche les images sur le disque, ça peut durer du temps.
J'ai donc mis une ProgressBar dans ma fenêtre, qui est censée s'incrémenter au fur et à mesure que j'ai chargé les images.
Seul hic : ben ça ne rafraîchit pas.
 
Au départ, j'avais mis un bar.Invalidate() dans me boucle, et voyant que ça ne marchait pas, j'ai mis ça dans un Timer. Rien ne change, j'ai un rectangle gris qui s'affiche, et qui ne se refraîchit jamais.
 
PS: Ma form est doublebuffered. Mais bon, j'ai shooté ça, et ça n'a rien changé, donc je ne suis pas sûr que ça impacte vraiment le rendu à ce niveau :)

Reply

Marsh Posté le 27-07-2006 à 17:52:44    

Lors des longs process, il faut jouer avec les thread pour que l'interface graphique continue "à réagir".
 
Le principe est de lancer le long travail dans un thread:
 
http://msdn2.microsoft.com/fr-fr/library/ms173178.aspx

Reply

Marsh Posté le 27-07-2006 à 19:01:06    

jey350 a écrit :

Lors des longs process, il faut jouer avec les thread pour que l'interface graphique continue "à réagir".
 
Le principe est de lancer le long travail dans un thread:
 
http://msdn2.microsoft.com/fr-fr/library/ms173178.aspx


c'est fait, mais la barre ne s'affiche toujours pas. j'ai tenté deux méthodes de callback trouvées dans la MSDN, mais rien n'y fait : soit elle bouge pas, soit carrément les deux thread s'attendent mutuellement et j'ai plus qu'à killer l'appli :/
 
http://forum.hardware.fr/hardwaref [...] m#t1413587
 
ps: arjuna = magicbuzz

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed