DrawEllipse avec fond transparent

Signaler
Messages postés
27
Date d'inscription
samedi 19 juin 2004
Statut
Membre
Dernière intervention
14 octobre 2008
-
Messages postés
27
Date d'inscription
samedi 19 juin 2004
Statut
Membre
Dernière intervention
14 octobre 2008
-
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
A voir également:

5 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Salut, tu es le seul à voir ton image, elle est sur ton disque.. héberge la sur imageshack.us ou hiboox.com ou mezimages.com ou sur un ftp etc..
Messages postés
27
Date d'inscription
samedi 19 juin 2004
Statut
Membre
Dernière intervention
14 octobre 2008
2
A oui c'est sure que ça marchera pas
voila l'image :
http://www.hiboox.com/image.php?img=o1is0kk.jpg
Babou ^^
Messages postés
27
Date d'inscription
samedi 19 juin 2004
Statut
Membre
Dernière intervention
14 octobre 2008
2
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)
   
int offsetx = Math.Min(e.X, this.OldPos.X);
   
int offsety = Math.Min(e.Y, this.OldPos.Y);
   


Rectangle rInvalid = new Rectangle(offsetx, offsety, Math.Abs(this.OldPos.X - e.X), Math.Abs(this.OldPos.Y - e.Y));
  
this

.zonedessin.Invalidate(rInvalid ,

true




); // 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

Region
(areaPath);
}

this
.zonedessin.Invalidate(areaRegion,
true
);

pen1.Dispose();
pen2.Dispose();
/////// code //////

Et là ça me fait pas le carrée englobant, mais ça me dessine des especes de goutte d'eau toute blanche
Pouvez vous m'aider ?
Merci
Babou
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
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.
Messages postés
27
Date d'inscription
samedi 19 juin 2004
Statut
Membre
Dernière intervention
14 octobre 2008
2
Oui bon j'ai changé pour mettre un double buffer et ça marche maintenant!
Merci!Babou