Le double buffering pr eliminer les lignes blanches qui apparaissent a lexecutio

cs_mounal Messages postés 10 Date d'inscription vendredi 22 août 2008 Statut Membre Dernière intervention 20 avril 2009 - 28 sept. 2008 à 04:26
maroine2008 Messages postés 1 Date d'inscription dimanche 1 mars 2009 Statut Membre Dernière intervention 15 mai 2011 - 15 mai 2011 à 01:21
Slt,
j'ai un prob,cest que j'ai developper une petite application qui affiche un ballon qui se gonfle et qui se degonfle ds un intervalle de temps,j'ai remarqué qu'a lexcution ,l'image n'est pas pure,il ya des lignes blanches qui apparaissent et apres une recherche,il ya le principe du buffering qu'il faut inclure au code,mais toujours il faut le definir ds le la methode "paint",et le dessin devrait etre presque obligatoirement ds la mm methode!!
mais ds code,je sais pas comment faire ds mon cas,j'ai des fonction pr dessiner,j'ai essayé plusiers choses mais ca marche pas.
svp aidez moi pr ke je puisse avancer!
voila mon code:
using

System;
using

System.Collections.Generic;
using

System.ComponentModel;
using

System.Data;
using

System.Drawing;
using

System.Text;
using

System.Windows.Forms;
namespace

Ballon{

public
partial
class
Ballon :
Form{

//déclaration de la variable rayon

public
int rayon;

//création d'un objet de la classe abstraite Brush responsable

//du remlissage des formes (rectangle,ellipse...)

public
Brush couleur;

public Ballon(){

InitializeComponent();

rayon = 0;

//instanciation de la classe Timerx1 =

new
Timer();

//methode qui manipule l' evenement augmenter rayon. Se produit quand l'intervalle de temps s'est écouléx1.Tick +=

new
EventHandler(augmenterRayon);x1.Interval = 30;

//définit le temps entre deux evenementsx2 =

new
Timer();

// manipuler l' evenement d'abaissement du rayon à chaque interval de tempsx2.Tick +=

new
EventHandler(BaisserRayon);x2.Interval = 30;

//instanciation de la classe Brush à l'intermidiaire de la classe Brushes pour toutes les couleurs bleuescouleur =

Brushes.Blue;}

 

public
void augmenterRayon(
object sender, System.
EventArgs e){

Graphics g =
this.CreateGraphics();

if (rayon < ClientRectangle.Width / 2)
//si le rayon < au rayon de la fenêtre{

g.FillRectangle(

Brushes.White, ClientRectangle);
//colore la fenêtre en blanc

// fonction qui dessine un disque plein ,elle a 5 parametres : la couleur coordonnée du centre

// et les coord du rectangle à l'interieur duquel il y aurait le disqueg.FillEllipse(couleur, ClientRectangle.Width / 2 - rayon, ClientRectangle.Width / 2 - rayon, 2 * rayon, 2 * rayon);

//incrementation du rayonrayon++;

}

else
//si le rayon arrive au bord de la fenêtre client {

x2.Start();

//debut événememt baisser-rayon (degonfler)x1.Stop();

//arreter le gonflement }

}

public
void BaisserRayon(
object sender, System.
EventArgs e){

Graphics g =
this.CreateGraphics();g.FillRectangle(

Brushes.White, ClientRectangle);

if (rayon > 0){

g.FillRectangle(

Brushes.White, ClientRectangle);g.FillEllipse(couleur, ClientRectangle.Width / 2 - rayon, ClientRectangle.Width / 2 - rayon, 2 * rayon, 2 * rayon);

rayon--;

//decrementation du rayon}

else
//si le rayon est nul{

x1.Start();

//gonflement du ballonx2.Stop();

//degonflement du ballon }

}

 

public
static
void lanceBallon(
Ballon b){

b.x1.Start();

}

//génération d'évenement gonflement du ballon si on click sur l'element gonfler du menu action.

private
void gonflerToolStripMenuItem_Click(
object sender,
EventArgs e){

Graphics g =
this.CreateGraphics();
//objet de controle du grapheg.FillRectangle(

Brushes.White, ClientRectangle);x1.Start();

//debut d'evenement : gonfler (augmenter rayon)x2.Stop();

// arret d'evenement : degonfler (baisser rayon)}

//génération de l'évenement dégonflement du ballon si on click sur l'element dégonfler du menu actio

private
void degonflerToolStripMenuItem_Click(
object sender,
EventArgs e){

Graphics g =
this.CreateGraphics();g.FillRectangle(

Brushes.White, ClientRectangle);x2.Start();

x1.Stop();

}

private
void Ballon_Load(
object sender,
EventArgs e){

}

}

}

5 réponses

cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
28 sept. 2008 à 22:40
Bonsoir,
Pour le double buffering, tu peux utiliser ceci:
this.SetStyle(<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

  ControlStyles.AllPaintingInWmPaint |

  ControlStyles.UserPaint |

  ControlStyles.DoubleBuffer,true);

<hr />
-My Blog-
0
cs_mounal Messages postés 10 Date d'inscription vendredi 22 août 2008 Statut Membre Dernière intervention 20 avril 2009
29 sept. 2008 à 04:54
slt,
oui mais le prob est je sais pas ou mettre les instructions:


Buffer = new
Bitmap(
this.Width,
this.Height);



Graphics
g =

Graphics
.FromImage(Buffer);






normalement c'est tjrs ds le paint mais moi,je dessine pas ds le paint,j'ai des fonctions pr dessiner(augmenterrayon..).et ou je peux appeler ces methodes pr lire a partir du buffer et le liberer. 

g.DrawImageUnscaled(Buffer, 0, 0);

g.Dispose();


 plz aidez moi.
0
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
29 sept. 2008 à 08:21
Cette instruction est à mettre au niveau du constructeur.
Si tu ne dessines pas dans le paint, c'est probablement une erreur. Erreur qui pourrait expliquer pourquoi tu as des problemes d'affichage...

<hr />
-My Blog-
0
cs_mounal Messages postés 10 Date d'inscription vendredi 22 août 2008 Statut Membre Dernière intervention 20 avril 2009
29 sept. 2008 à 15:27
je dois ecrire tout mon code,dans le paint!!!!ta lu mon code!!!?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
maroine2008 Messages postés 1 Date d'inscription dimanche 1 mars 2009 Statut Membre Dernière intervention 15 mai 2011
15 mai 2011 à 01:21
//creation d'un tampon image en memoire
Bitmap bm = new Bitmap(Largeur, Hauteur);
//associer un Graphics à ce bitmap
Graphics gp = Graphics.FromImage(bm)
// Dessiner dans le graphics associé au bitmap
gp.FillRectangle(…)
//copier le bitmap dans le graphics Video
Graphics gvi = this.CreateGraphics();
Gvi.DrawImage(bm);
0
Rejoignez-nous