Zaawansowane rysowanie tekstu w C#Pisząc różnego rodzaju aplikacje (i gry), chcielibyśmy czasami mieć większa możliwość dostosowania parametrów rysowanego tekstu niż tylko krój, rozmiar i kolor. W .NET jest to bardzo proste -- pokażę dzisiaj jak łatwo można to osiagnać za pomocą GraphicPath.
GraphicPath jest klasą przechowującą ścieżki, które mogą być używane do późniejszego rysowania. Metoda AddString pozwala na dodanie tekstu, co wykorzystamy. Przyjmijmy takie wartości parametrów:
FontFamily fontFamily = new FontFamily("Tahoma");
Point location = new Point(100, 100);
int style = (int)FontStyle.Bold;
float emSize = 100;
Zacznijmy od wypełnienia tekstu grafiką:
void DrawText1(Graphics g, string text)
{
g.SmoothingMode = SmoothingMode.AntiAlias;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
using (GraphicsPath path = new GraphicsPath())
{
path.AddString(text, fontFamily, style, emSize, location,
StringFormat.GenericDefault);
using (TextureBrush brush = new TextureBrush(bgBitmap))
{
g.FillPath(brush, path);
}
}
}

Możemy użyć tego samego sposobu do wypełnienia tekstu dowolnym obiektem Brush, np. gradientem:
void DrawText2(Graphics g, string text)
{
g.SmoothingMode = SmoothingMode.AntiAlias;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
using (GraphicsPath path = new GraphicsPath())
{
path.AddString(text, fontFamily, style, emSize, location,
StringFormat.GenericDefault);
using (LinearGradientBrush brush
= new LinearGradientBrush(path.GetBounds(), Color.Red, Color.Blue, 90.0f))
{
g.FillPath(brush, path);
}
}
}

Możemy też zrobić obrys tekstu:
void DrawText3(Graphics g, string text)
{
g.SmoothingMode = SmoothingMode.AntiAlias;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
using (GraphicsPath path = new GraphicsPath())
{
path.AddString(text, fontFamily, style, emSize, location,
StringFormat.GenericDefault);
using (Pen pen = new Pen(Color.Black, 3))
{
pen.DashStyle = DashStyle.DashDot;
pen.LineJoin = LineJoin.Round;
g.DrawPath(pen, path);
}
}
}

Sposób ten daje dużo możliwości i pozwala na osiągnięcie ciekawych efektów. Ja używam tego do generowania fontów bitmapowych do swoich projektów:
Dodaj komentarz