zoukankan      html  css  js  c++  java
  • C#实现艺术字

    今天, 我们就利用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开始坐标")
    希望对大家有所帮助.

  • 相关阅读:
    uniapp中pages文件及iconfont引入
    js判断字符串是否为JSON格式
    分布式事务CAP简介
    C#面试题
    关于跨域问题
    JS显示隐藏节点
    JS时间序列化显示
    前端命令
    Java8
    java14环境变量配置超简单
  • 原文地址:https://www.cnblogs.com/zhezhe101/p/1303778.html
Copyright © 2011-2022 走看看