Double buffering et lenteur d'affichage [Résolu]

Signaler
Messages postés
6
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
19 novembre 2005
-
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
-
Bonjour j'essaye de réaliser un logiciel tout bête qui affiche la
map d'un jeu.je souhaite que l'on puisse zoomer /dezoomer sur cette
carte.

le problème du zoom etait que lorsque je redessinais l'image au
nouvelles echelles l'ecran clignotait. J'ai donc fait de petites
recherche et j'ai tenter d'appliquer le double buffering en un bitmap.



MON PROBLEM EST LE SUIVANT : CA RAME!!!!!!



en fait lorsque je lance mon application et que j'effectue un zoom ,ca
peu prendre environt une minute pour changer l'image. Pour info
j'utilise un map au format jpg dont les dimension sont 8800 * 6000 a
peu pres .



voici ma methode on paint surchagée :



protected override void OnPaint(PaintEventArgs e)

{

map
= new Bitmap(mapFile,mapFile.Width * zoom / 100, mapFile.Height * zoom
/ 100); //je crée mon bitmap a partir de l'image


Graphics Viewable = mapContenair.CreateGraphics(); //je prepare
l'affichage dans mon panel


mapContenair.Size = new Size(mapFile.Width * zoom / 100, mapFile.Height
* zoom / 100); //je met mon panel aux bonne dimensions


Viewable.DrawImageUnscaled(map, 0, 0); //j'affche le contenu du bitmap
dans le panel



}

Y a t'il une solution software a mon probleme ou cela est -il du à la taille "imporante" de mon image ???

merci de votre aide



ps: si j'ai fait le boulet ou s'il fo plus de detail sur le code je m'en excuse d'avance et je mettrais ca le plus vite possible

7 réponses

Messages postés
6
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
19 novembre 2005

voila nouvelle question suite a des test ......toute les methode que
l'on toruve pour le double buffering marchent tres bien des que l'on
dessine sur une form cependant ce n'est plus du tout le cas lorsqu'il
s'agit d'un panel????

comme j'aimerais utiliser un panel me voila bien enbêté
Messages postés
6
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
19 novembre 2005

dsl pour les fautes j'aurais du me relire :p
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
je ne serais te conseiller l'excellent article de TKfé sur www.dotnet-tech.com
(http://www.dotnet-tech.com/tutoriels/double_buffering/)

Sébastien FERRAND

Blog :
http://blogs.developpeur.org/sebmafate</FO< body>
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
hop rapidement comme ca, quelques idees, desole si j'ai mal cerne le probleme:


- Tu crees une image trop grande, zoom uniquement sur la partie visible a l'ecran.


- Pourquoi creer l'object graphics du panel dans cette fonction, utilise ses propres evenements.


- Tu n'utilise pas Graphics.Dispose apres CreateGraphics.


- Tu change la taille de ton panel apres avoir obtenu son object Graphics, fait l'inverse.


- Ton panel est enorme, pourquoi adapter la taille du panel a l'image ?


- calcul le zoom une fois pour toute, pas deux fois.


- Si ton image ou ton control est enorme, ton double buffer l'est egalement.
Messages postés
6
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
19 novembre 2005

merci pour tout j'ai deja changé pour n'afficher que la zone de l'image
à afficher mais bon maintenant c comme si mon double buffering ne
fonctionnait pas.....sinon plus de rame!!!

je vais aller voir le site que tu m'a donné Sebmafate ,merci pour vos aides.
Messages postés
6
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
19 novembre 2005

ha oui aussi j'utilise la beta de visual c# express 2005 avec une
beta 2.04..... du framework je me demande si ca y est pas pour quelque
chose...
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Il me semble que le double buffering "automatique" marche avec l'object Graphics de l'evenement Paint mais pas avec CreateGraphics.