Le double buffering pr eliminer les lignes blanches qui apparaissent a lexecutio
cs_mounal
Messages postés10Date d'inscriptionvendredi 22 août 2008StatutMembreDernière intervention20 avril 2009
-
28 sept. 2008 à 04:26
maroine2008
Messages postés1Date d'inscriptiondimanche 1 mars 2009StatutMembreDernière intervention15 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 {
cs_mounal
Messages postés10Date d'inscriptionvendredi 22 août 2008StatutMembreDernière intervention20 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.
cs_Bidou
Messages postés5486Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 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...
maroine2008
Messages postés1Date d'inscriptiondimanche 1 mars 2009StatutMembreDernière intervention15 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);