天明居

这个世界的问题在于聪明人充满疑惑,而傻子们坚信不疑。--罗素
                                                                   业精于勤,荒于嬉;行成于思,毁于随

   ::  :: 新随笔  :: 联系 ::  :: 管理

今天, 我们就利用C#来制作几款自己的艺术字, 可能会对我们了解字体图像的制作原理有一些帮助. 至于有没有使用价值我保持沉默.

所有程序注意引用下列命名空间
using System.Drawing.Text;

using System.Drawing.Drawing2D;

 

程序代码实现如下:一.投影效果
 
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 浮雕效果_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 印版效果_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 倒影效果_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 纹理效果_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 倾斜效果_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 渐变色效果_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 旋转效果_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开始坐标")
希望对大家有所帮助.

posted on 2008-10-04 14:23  寻乐  阅读(461)  评论(0编辑  收藏  举报