Forums Neueste Beiträge
 

Schatten für GraphicsPath 'selbst' erstellen

03/09/2008 - 18:54 von Bastie | Report spam
Hallo,

ich bin gerade etwas unzufrieden mit den grafischen Aussehen...
Ich erzeuge über ein GraphicsPath Object mit AddString einen schönen
Text und erzeuge mir anschließend eine Region die Dargestellt wird.

Leider sieht man fast jeden Pixel einzelnd (grumme). Ich habe mir auch
schon das Graphics Object geholt und mit den Einstellungen zu
o System.Drawing.Drawing2D.CompositingQuality;
o System.Drawing.Drawing2D.InterpolationMode;
o System.Drawing.Drawing2D.PixelOffsetMode;
o System.Drawing.Drawing2D.SmoothingMode;
o System.Drawing.Text.TextRenderingHint;
rumgespielt - ohne Erfolg!

Daher war mein Gedanke eventuell einen Schatten zu erzeugen oder
irgendetwas was mir hilft hier eine ansprechende Darstellung zu
erreichen.

Daher zwei Fragen:
(a) bin ich überhaupt auf dem richtigen Weg?
(b) wie würde ich einen Schatten erzeugen können?

Danke vorab
Bastie

PS: Unabhàngig zur Antwort zu a interessiert mich auch die Antwort zu
b.
 

Lesen sie die antworten

#1 Frank Dzaebel
03/09/2008 - 20:44 | Warnen spam
Hallo,

es wàre schön, wenn Du Deinen Realnamen als Usernamen benutzt.

ich bin gerade etwas unzufrieden mit den grafischen Aussehen...
[...] Daher war mein Gedanke eventuell einen Schatten
zu erzeugen oder irgendetwas was mir hilft hier eine
ansprechende Darstellung zu erreichen. Daher zwei Fragen:
(a) bin ich überhaupt auf dem richtigen Weg?
(b) wie würde ich einen Schatten erzeugen können?



ein Schatten ist IMHO eine richtige Idee und IMHO unbedingt notwendig.
Weisser Text auf weissem Grund (z.B.) ist halt nicht gut
lesbar. Nutze für Qualitàtsverbesserungen ggf. die:

[TextRenderer.DrawText-Methode (System.Windows.Forms)]
http://msdn.microsoft.com/de-de/lib...wtext.aspx


Zum Erstellen des Schattens kannst Du in erster
Nàherung einfach den Text zweimal mit kontrastierenden
Farben an unterschiedlichen Positionen zeichnen.
Vielleicht mal, so als grober Ansatz:

public Form1()
{
InitializeComponent();
punkte.Add(new Point(px - delta, py + delta));
punkte.Add(new Point(px + delta, py - delta));
punkte.Add(new Point(px - delta, py - delta));
punkte.Add(new Point(px + delta, py + delta));
}

int px = 40; int py = 50; int delta = 1;
const int fontsize = 60;
Font font = new Font("Arial", fontsize);
List<Point> punkte = new List<Point>();
string text = "Franzisukus";

private void button1_Click(object sender, EventArgs e)
{
Graphics g = this.CreateGraphics();
g.TextRenderingHint = TextRenderingHint.AntiAlias;
g.SmoothingMode = SmoothingMode.AntiAlias;
foreach (Point p in punkte)
TextRenderer.DrawText(g, text, font, p, Color.Black);
TextRenderer.DrawText(g, text, font, new Point(px, py), Color.White);
g.Dispose();
}

__________________________________________
Richtig professionelle Schatten sind aufwendiger, oder
mit Technologien wie DirectX anprogrammierbar.
Oder etwas andere Technik :

public Form1()
{
InitializeComponent();
this.SetStyle(ControlStyles.ResizeRedraw, true);
}

protected override void OnPaintBackground(PaintEventArgs e)
{
LinearGradientBrush b = new LinearGradientBrush(this.ClientRectangle,
Color.Blue, Color.AliceBlue, 90f);
e.Graphics.FillRectangle(b, this.ClientRectangle);
b.Dispose();
}

Font font = new Font("Arial", 60);

protected override void OnPaint(PaintEventArgs e)
{
Bitmap bm = new Bitmap(this.ClientSize.Width / 4, this.ClientSize.Height /
4);
Graphics g = Graphics.FromImage(bm);
g.TextRenderingHint = TextRenderingHint.AntiAlias;
g.SmoothingMode = SmoothingMode.AntiAlias;
Matrix mx = new Matrix(0.25f, 0, 0, 0.25f, 3, 3);
g.Transform = mx;
g.DrawString("Text with a dropshadow", font,
new SolidBrush(Color.FromArgb(128, Color.Black)), 10, 10,
StringFormat.GenericTypographic);
g.Dispose();
e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
e.Graphics.TextRenderingHint = TextRenderingHint.AntiAlias;
e.Graphics.DrawImage(bm, this.ClientRectangle, 0, 0, bm.Width,
bm.Height, GraphicsUnit.Pixel);
e.Graphics.DrawString("Text with a dropshadow", font,
Brushes.White, 10, 10, StringFormat.GenericTypographic);
bm.Dispose();
}


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

Ähnliche fragen