babou6a
Messages postés27Date d'inscriptionsamedi 19 juin 2004StatutMembreDernière intervention14 octobre 2008
-
5 juin 2006 à 15:34
babou6a
Messages postés27Date d'inscriptionsamedi 19 juin 2004StatutMembreDernière intervention14 octobre 2008
-
8 juin 2006 à 12:44
Bonjour,
j'essaye de refaire une sorte de paint. Mon programme marche bien mais avec quelques souci graphique : si je dessine un carré plein sur la zone de dessin et qu'après je dessine un cercle rempli, ça me fait ça :
Je voudrais donc faire en sorte que quand je dessine une forme (rectangle, ellipse ou line), ça me dessine pas la boite englobante, ou alors qu'elle soit transparente ... est ce que quelqu'un peut m'aider ?
Merci
Babou
babou6a
Messages postés27Date d'inscriptionsamedi 19 juin 2004StatutMembreDernière intervention14 octobre 20082 5 juin 2006 à 19:32
Bon j'ai trouvé d'ou vient le problème. En fait lorsque je dessine un ovale, j'ai trouvé un code pour récuperer le cadre englobant et l'enregistrer dans un buffer bitmap (pour pouvoir dessiner plusieurs forme comme dans un paint classique). Mais c'est ce cadre englobant qui met un carré blanc autout de ma forme. Pour le rectangle c'est pas problématique mais pour la ligne ou l'ellipse ça ne va pas. Voilà mon code pour faire une ellipse remplie lorsque la souris bouge (MouseMove) :
////////// code /////////////
g.Clear(
Color
.White); // refresh
Pen
pen1 =
new
Pen
(couleurcourante, 1);
Brush
pen2 =
new
SolidBrush
(couleurcourante);
if (OldPos != new Point(-1, -1)){
g.DrawEllipse(pen1, this.OldPos.X, this.OldPos.Y, this.size.Width, this.size.Height);
g.FillEllipse(pen2, this.OldPos.X, this.OldPos.Y, this.size.Width, this.size.Height);
}
// Calcul de la zone à redessiner ( recherche du rectangle circonscrit)
); // enregistrer le carrée englobant et ce qu'il y a dedans dans le buffer bitmap
pen1.Dispose();
pen2.Dispose();
/////////////code ///////////
Du coup je pense qu'il faut utiliser une GraphicPath et demander à la zone de dessin de rafraichir une region plutot qu'un rectangle.
Mais je ne sais pas du tout comment faire ça! J'ai fait quelques essais :
//////// code ////////
g.Clear(Color
.White);
Pen
pen1 =
new
Pen
(couleurcourante, 1);
Brush
pen2 =
new
SolidBrush
(couleurcourante);
if (OldPos !=
new
Point
(-1, -1)){
areaPath = new
GraphicsPath
(
FillMode
.Winding);
areaPath.Widen(pen1);
areaPath.AddEllipse(this
.OldPos.X,
this
.OldPos.Y,
this
.size.Width,
this
.size.Height);
areaRegion = new
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 6 juin 2006 à 17:42
Je vois pas trop ce que c'est ce carré englobant.. Normalement on se sert d'un bitmap en mémoire comme d'un double buffer on fait tout ses dessins dessus et puis c'est ce bitmap qu'on affiche à l'écran.
Que ce soit avec DrawEllipse ou FillEllipse il n y a pas de cadre englobant de dessiné normalement.
Vous n’avez pas trouvé la réponse que vous recherchez ?