2010-12-01 6 views
1

Ich habe überall gesucht und googelte alles und konnte nichts Gutes finden. Was ich brauche, ist eine Klasse, die in der Lage ist, ein Bild (Grafiken) mit abgerundeten Ecken (verschiedene an jeder Ecke ist ein Plus) mit einem Rahmen und Farbverlauf zu zeichnen.Zeichnen Sie Bild mit abgerundeten Ecken, Grenze und Farbverlauf in C#

Alle Beispiele, die ich finde, haben einige Mängel (wie schlechte Qualität, fehlende Funktionalität usw.).

Ich werde dies mit einem Aschx verwenden, das das Bild zeichnen und dann dem Benutzer zeigen wird.

Danke!

Antwort

9

Mit der GraphicsPath können Sie relativ freie Formen zeichnen, die Sie dann mit einem Farbverlaufspinsel füllen können. Der folgende Beispielcode erstellt ein Rechteck mit zwei unterschiedlich abgerundeten Ecken und einer Verlaufsfüllung.

GraphicsPath gp = new GraphicsPath(); 
    gp.AddLine(new Point(10, 10), new Point(75, 10)); 
    gp.AddArc(50, 10, 50, 50, 270, 90); 
    gp.AddLine(new Point(100, 35), new Point(100, 100)); 
    gp.AddArc(80, 90, 20, 20, 0, 90); 
    gp.AddLine(new Point(90, 110), new Point(10, 110)); 
    gp.AddLine(new Point(10, 110), new Point(10, 10)); 
    Bitmap bm = new Bitmap(110, 120); 
    LinearGradientBrush brush = new LinearGradientBrush(new Point(0, 0), new Point(100, 110), Color.Red, Color.Yellow); 
    using (Graphics g = Graphics.FromImage(bm)) 
    { 
     g.FillPath(brush, gp); 
     g.DrawPath(new Pen(Color.Black, 1), gp); 
     g.Save(); 
    } 
    bm.Save(@"c:\bitmap.bmp"); 

Dieses Ergebnis in dem folgenden Bild:

alt text

0

Ich denke, Sie müssen Ihre eigene Methode erstellen, mit einem Grafikobjekt und "manuell" (lesen Sie "mit Code") erstellen Sie das Bild. Am einfachsten wäre es, ein einzelnes Grafikobjekt zu erstellen, einen Kreis hinzuzufügen, dann fügen Sie in jedem Quadranten des Bildes die benötigten Extras hinzu und teilen das Objekt in Viertel. Oder geben Sie das Ganze als ein Bild zurück und verwenden Sie dann CSS-Sprites, um das Bild an den richtigen Stellen mit den richtigen Koordinaten zu platzieren (wahrscheinlich die bessere Lösung, da es weniger Aufrufe an die Grafikbibliothek verwendet und nur eine Datei zurückgibt, also weniger Aufrufe an das Web Server).

Verwandte Themen