相信
中的 艺术字 功能大家都不陌生, 前面这个 "Word" 单词就是它所为. 今天, 我们就利用C#来制作几款自己的艺术字, 可能会对我们了解字体图像的制作原理有一些帮助. 至于有没有使用价值我保持沉默.
一. 投影效果
程序运行效果截图:
程序代码实现如下:
private void Form1_Paint(
object sender, PaintEventArgs e)
{
//投影文字
Graphics g =
this.CreateGraphics();
//设置文本输出质量
g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
g.SmoothingMode = SmoothingMode.AntiAlias;
Font newFont =
new Font(
"Times New Roman",
48);
Matrix matrix =
new Matrix();
//投射
matrix.Shear(-
1.5f,
0.0f);
//缩放
matrix.Scale(
1,
0.5f);
//平移
matrix.Translate(
130,
88);
//对绘图平面实施坐标变换、、
g.Transform = matrix;
SolidBrush grayBrush =
new SolidBrush(Color.Gray);
SolidBrush colorBrush =
new SolidBrush(Color.BlueViolet);
string text =
"博客园";
//绘制阴影
g.DrawString(text, newFont, grayBrush,
new PointF(
0,
30));
g.ResetTransform();
//绘制前景
g.DrawString(text, newFont, colorBrush,
new PointF(
0,
30));
}
二. 浮雕效果
程序运行效果截图:
程序代码实现如下:
private void Form1_Paint(
object sender, PaintEventArgs e)
{
//浮雕文字
Brush backBrush = Brushes.Black;
Brush foreBrush = Brushes.White;
Font font =
new Font(
"宋体", Convert.ToInt16(
40), FontStyle.Regular);
Graphics g =
this.CreateGraphics();
string text =
"博客园";
SizeF size = g.MeasureString(text, font);
Single posX = (
this.Width - Convert.ToInt16(size.Width)) /
2;
Single posY = (
this.Height - Convert.ToInt16(size.Height)) /
2;
g.DrawString(text, font, backBrush, posX+
1, posY+
1);
g.DrawString(text, font, foreBrush, posX, posY);
}
三. 印版效果
程序运行效果截图:
程序代码实现如下:
private void Form1_Paint(
object sender, PaintEventArgs e)
{
//印版文字
int i =
0;
Brush backBrush = Brushes.Black;
Brush foreBrush = Brushes.Violet;
Font font =
new Font(
"Times New Roman", System.Convert.ToInt16(
40), FontStyle.Regular);
Graphics g =
this.CreateGraphics();
g.Clear(Color.White);
string text =
"博客园";
SizeF size = g.MeasureString(text, font);
Single posX = (
this.Width - Convert.ToInt16(size.Width)) /
2;
Single posY = (
this.Height - Convert.ToInt16(size.Height)) /
3;
while (i < Convert.ToInt16(
20))
{
g.DrawString(text, font, backBrush, posX - i, posY + i);
i = i +
1;
}
g.DrawString(text, font, foreBrush, posX, posY);
}
四. 倒影效果
程序运行效果截图:
程序代码实现如下:
private void Form1_Paint(
object sender, PaintEventArgs e)
{
//倒影文字
Brush backBrush = Brushes.Gray;
Brush foreBrush = Brushes.Black;
Font font =
new Font(
"幼圆", Convert.ToInt16(
40), FontStyle.Regular);
Graphics g =
this.CreateGraphics();
string text =
"博客园";
SizeF size = g.MeasureString(text, font);
int posX = (
this.Width - Convert.ToInt16(size.Width)) /
2;
int posY = (
this.Height - Convert.ToInt16(size.Height)) /
2;
g.TranslateTransform(posX, posY);
int ascent = font.FontFamily.GetCellAscent(font.Style);
int spacing = font.FontFamily.GetLineSpacing(font.Style);
int lineHeight = System.Convert.ToInt16(font.GetHeight(g));
int height = lineHeight * ascent / spacing;
GraphicsState state = g.Save();
g.ScaleTransform(
1, -
1.0F);
g.DrawString(text, font, backBrush,
0, -height);
g.Restore(state);
g.DrawString(text, font, foreBrush,
0, -height);
}
五. 阴影效果
程序运行效果截图:
private void Form1_Paint(
object sender, PaintEventArgs e)
{
//阴影文字
string text =
"博客园";
Brush shadowBrush = Brushes.Gray;
Brush foreBrush = Brushes.Black;
Font font =
new Font(
"幼圆", Convert.ToInt16(
40), FontStyle.Regular);
Graphics g =
this.CreateGraphics();
SizeF size = g.MeasureString(text, font);
Single posX = (
this.Width - Convert.ToInt16(size.Width)) /
4;
Single posY = (
this.Height - Convert.ToInt16(size.Height)) /
3;
g.DrawString(text, font, shadowBrush, posX + Convert.ToInt16(
20), posY + Convert.ToInt16(
20));
g.DrawString(text, font, foreBrush, posX, posY);
}
六.纹理效果
程序运行效果截图:
程序代码实现如下:
private void Form1_Paint(
object sender, PaintEventArgs e)
{
//使用图像填充文字线条
TextureBrush brush =
new TextureBrush(Image.FromFile(Application.StartupPath +
"\\myPicture.jpg"));
Graphics g = e.Graphics;
g.DrawString(
"博客园",
new Font(
"隶书",
60), brush,
new PointF(
0,
0));
}
七. 倾斜效果
程序运行效果截图:
程序代码实现如下:
private void Form1_Paint(
object sender, PaintEventArgs e)
{
Brush foreBrush = Brushes.Blue;
Font font =
new Font(
"幼圆", Convert.ToInt16(
40), FontStyle.Regular);
Graphics g =
this.CreateGraphics();
string text =
"博客园";
SizeF size = g.MeasureString(text, font);
Single posX = (
this.Width - Convert.ToInt16(size.Width)) /
2;
Single posY = (
this.Height - Convert.ToInt16(size.Height)) /
2;
g.TranslateTransform(posX, posY);
Matrix transform = g.Transform;
//右倾斜文字
//float shearX = -0.230F;
//左倾斜文字
float shearX =
0.550F;
float shearY =
0.10F;
transform.Shear(shearX, shearY);
g.Transform = transform;
g.DrawString(text, font, foreBrush,
0,
0);
}
八.渐变色效果
程序代码实现如下:
private void Form1_Paint(
object sender, PaintEventArgs e)
{
//渐变色文字
String text =
" 博客园";
Brush ShadowBrush = Brushes.Gray;
Brush ForeBrush = Brushes.Black;
Font font =
new Font(
"幼圆", System.Convert.ToInt16(
40), FontStyle.Regular);
Graphics g =
this.CreateGraphics();
//g.Clear(Color.White);
PointF point =
new PointF(
0,
0);
SizeF size = g.MeasureString(text, font);
RectangleF rectangle =
new RectangleF(point, size);
Brush brush =
new LinearGradientBrush(rectangle, Color.Red, Color.Green, LinearGradientMode.Horizontal);
int width = (
this.Width - Convert.ToInt16(size.Width)) /
2;
int height = (
this.Height - Convert.ToInt16(size.Height)) /
2;
g.DrawString(text, font, brush, width, height);
}
九. 旋转效果
程序运行效果截图:
程序代码实现如下:
private void Form1_Paint(
object sender, PaintEventArgs e)
{
//旋转显示文字
Graphics g = e.Graphics;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
for (
int i =
0; i <=
360; i +=
10)
{
//平移Graphics对象到窗体中心
g.TranslateTransform(
this.Width /
2,
this.Height /
2);
//设置Graphics对象的输出角度
g.RotateTransform(i);
//设置文字填充颜色
Brush brush = Brushes.DarkViolet;
//旋转显示文字
g.DrawString(
".bo ke yuan ",
new Font(
"Lucida Console", 11f), brush,
0,
0);
//恢复全局变换矩阵
g.ResetTransform();
}
}
十. ..........
后记:
还有很多, 原理都相当简单, 绘制字体图关键要熟悉三个常用绘图类
Brush, Font, Graphics; 这里用到的主要方法是Graphics类的 DrowString.
此方法共有6个版本, 这里用到的版本是
g.DrawString("文本", "字体", "画刷", "X开始坐标", "Y开始坐标")
暂到此...
希望对大家有所帮助.
程序运行效果截图: