Gestion de Buffer Graphique

Gestion de Buffer Graphique - C#/.NET managed - Programmation

Marsh Posté le 23-12-2009 à 00:01:23    

Salut tout le monde,
 
Pour un projet C# j'ai un petit soucis et je n'ai pas réussi à trouver sur l'aide en ligne.
 
Je crée un programme de création de circuit électrique (résistance,moteur,générateur...) sur une grille redimensionnable. Je gère l'affichage avec un double buffering.
 
Lorsque je redimensionne ma grille à une taille inférieure. J'aimerais donc supprimer la partie de la grille qui ne sera plus affchée à l'écran mais qui est toujours dans le buffer. Est-ce possible donc de supprimer une zone d'affichage du buffer?
 
Merci d'avance
alex

Reply

Marsh Posté le 23-12-2009 à 00:01:23   

Reply

Marsh Posté le 23-12-2009 à 11:37:56    

Salut,
Tu envisages le redimensionnement inférieur la ca va, mais si c'etait l'agrandissement -> crash car buffer pas assez grand!
 
Je pense que tu dois recréer un buffer de taille adapté à l'affichage à chaque redimensionnement de la fenetre.

Reply

Marsh Posté le 23-12-2009 à 11:52:15    

Ok c'est ce que je pensais aussi. Donc soit prévoir dès le départ un buffer asser grand et imposer une limite de grille maximale. Ou alors adapter le buffer à chaque redimensionnement. Mais bon à ce moment il faudra voir à na pas supprimer les trait présents dans le buffer qui représentent le circuit.
 
Pour le redimensionnement j'avais pensé à quelques chose du genre :
 

Citation :


 
if ((DisplayRectangle.Height != 0) && (DisplayRectangle.Width != 0))
{
    if ((this._tailleMemoireTamponPrincipale.Width < this.DisplayRectangle.Width) || (this._tailleMemoireTamponPrincipale.Height < this.DisplayRectangle.Height))
    {//le formulaire est plus grand...il faut agrandir la mémoire tampon
          BufferedGraphics newMemoire;
 
          Rectangle rect;
          rect = new Rectangle(0, 0, Math.Max(this._tailleMemoireTamponPrincipale.Width, this.DisplayRectangle.Width),Math.Max(this._tailleMemoireTamponPrincipale.Height, this.DisplayRectangle.Height));
          newMemoire = _ContextMemoireTampon.Allocate(this.CreateGraphics(),rect);
          newMemoire.Graphics.Clear(this.BackColor);
 
          _MemoireTamponPrincipale.Render(newMemoire.Graphics);
          _MemoireTamponPrincipale.Dispose();
          _MemoireTamponPrincipale = newMemoire;
          _tailleMemoireTamponPrincipale.Width = rect.Width;
          _tailleMemoireTamponPrincipale.Height = rect.Height;
 
          newMemoire = _ContextMemoireTampon.Allocate(this.CreateGraphics(), this.DisplayRectangle);
         _MemoireTamponSecondaire.Dispose();
          _MemoireTamponSecondaire = newMemoire;
       }
}

Message cité 1 fois
Message édité par aLx3 le 23-12-2009 à 11:52:50
Reply

Marsh Posté le 23-12-2009 à 12:54:49    

aLx3 a écrit :

Mais bon à ce moment il faudra voir à na pas supprimer les trait présents dans le buffer qui représentent le circuit.


Euh on est censé tout redessiné a chaque image normalement je crois, donc on vide le buffer  chaque fois non?
ou alors tu definis un espace de travail virtuel fixe (c'est a dire offscreen) et tu "zoomes" dessus en fonction de la portion du circuit que tu veux afficher sur un buffer toujours de la taille de la zone a affichée

Reply

Sujets relatifs:

Leave a Replay

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