Graphics.Clip für Kreisflächen

09/02/2010 - 17:27 von Jakob Brunner, Luzern Switzerland | Report spam
Salü zàme
Das Graphics-Element kennt die schöne Funktion des Clips, mit dem man den
Zeichnungsbereich einer Grafik schön eingrenzen kann. Grafiken über diese
Grenze hinaus können normal gezeichnet werden, ohne dass der Übergangspunkt
in den Grafikbereich zuerst errechnet werden muss.
Clip hat meiner Meinung nach nur die Unschönheit, dass sie lediglich für
rechteckige Zeichnungsflàchen angewandt werden kann.
Ist es möglich eine solche Clipfunktion auch für eine kreisförmige Flàche
anwenden zu können, so dass die Grafik ganz normal gezeichent werden kann,
mit der Clipfunktion genau nur die kreisfürmig eingegrenzte Zeichnungsflàche
sichtbar bleibt?

Ich hoffe da weiss jemand was Gescheites darüber!!!
Danke und Gruss
Jakob
 

Lesen sie die antworten

#1 Frank Dzaebel
09/02/2010 - 20:08 | Warnen spam
Hallo Jakob,

Clip hat meiner Meinung nach nur die Unschönheit, dass sie lediglich für
rechteckige Zeichnungsflàchen angewandt werden kann.
Ist es möglich eine solche Clipfunktion auch für eine kreisförmige
Flàche
anwenden zu können, so dass die Grafik ganz normal gezeichent werden
kann,
mit der Clipfunktion genau nur die kreisfürmig eingegrenzte
Zeichnungsflàche
sichtbar bleibt?



Zum Beispiel einfach über SetClip mit intersecting
Region gehen:

[Graphics.SetClip-Methode (Region, CombineMode) (System.Drawing)]
http://msdn.microsoft.com/de-de/lib...b278e.aspx
__________________

Image img;

private void Form1_Load(object sender, EventArgs e)
{
string bilderVerzeichnis =
Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
string bildPfad = Path.Combine(bilderVerzeichnis, "Schnecke.png");
img = new Bitmap(bildPfad);
}

private void button1_Click(object sender, EventArgs e)
{
// erzeuge eine kreisförmige Clip-Region:
Graphics g = this.CreateGraphics();
GraphicsPath path = new GraphicsPath();
path.AddEllipse(100, 100, 100, 100);
Region clipRegion = new Region(path);

// Zeichne ein Image normal, aber "z.B. intersecting"
// mit der kreisförmigen Clip-Kreis-Region:
g.SetClip(clipRegion, CombineMode.Intersect);
g.DrawImage(img, new Point(50, 50));
path.Dispose(); clipRegion.Dispose(); g.Dispose();
}

void KreisClipRegion(Graphics g, Rectangle clip)
{
GraphicsPath path = new GraphicsPath();
path.AddEllipse(clip);
Region clipRegion = new Region(path);
g.IntersectClip(clipRegion);
}


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen