代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Text;
using System.Drawing.Drawing2D;
using System.Data;
using System.Text;
using System.Windows.Forms;

public partial class WordArt : UserControl//这是一个艺术字的控件
    {     
        //文本属性
        private string _text = "WordArt";
        public string Caption
        {
            get { return _text; }
            set { _text = value; }
        }
        //字体以及大小
        private Font _WordArtFont = new Font("宋体",15);
        public Font WordArtFont
        {
            get { return _WordArtFont; }
            set { _WordArtFont = value; }
        }
        //颜色
        private Color _WordArtForeColor = Color.BlueViolet;
        public Color WordArtForeColor
        {
            get { return _WordArtForeColor; }
            set { _WordArtForeColor = value; }
        }
        //阴影的颜色
        private Color _WordArtBackColor = Color.Gray;
        public Color WordArtBackColor
        {
            set { _WordArtBackColor = value; }
            get { return _WordArtBackColor; }
        }
        //文本输出质量:呈现模式和平滑效果
        private TextRenderingHint _TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
        public TextRenderingHint WordArtTextRenderingHint
        {
            get { return _TextRenderingHint; }
            set { _TextRenderingHint = value; }
        }
       
        public SmoothingMode _SmoothingMode = SmoothingMode.AntiAlias;
        public SmoothingMode WordArtSmoothingMode
        {
            get { return _SmoothingMode; }
            set { _SmoothingMode = value; }
        }

public WordArt()
        {
            InitializeComponent();
        }
        //艺术字的形式:阴影,浮雕……
        private WordArtEffectStyle _WordArtEffect=WordArtEffectStyle.projection;//投影为默认形式;
        public WordArtEffectStyle WordArtEffect
        {
            get { return _WordArtEffect; }
            set { _WordArtEffect = value; }
        }

protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            Graphics g = this.CreateGraphics();
            Brush backBrush=new SolidBrush(this.WordArtBackColor);
            Brush foreBrush=new SolidBrush(this.WordArtForeColor);

SizeF size = g.MeasureString(this.Caption, this.WordArtFont);
            Single posX = (this.Width - Convert.ToInt16(size.Width)) / 2;
            Single posY = (this.Height - Convert.ToInt16(size.Height)) / 2;

switch (this.WordArtEffect)
            {
                case WordArtEffectStyle.projection://投影效果
                    //设置文本输出质量
                    g.TextRenderingHint = this.WordArtTextRenderingHint;
                    g.SmoothingMode = this.WordArtSmoothingMode;
                    Matrix matrix = new Matrix();
                    //投射
                    matrix.Shear(-1.5f, 0.0f);
                    //缩放
                    matrix.Scale(1, 0.5f);
                    //平移
                    matrix.Translate(120, 75);
                    //对绘图平面坐标实施变换
                    g.Transform = matrix;
                    //绘制阴影
                    SolidBrush grayBrush = new SolidBrush(this.WordArtBackColor);
                    SolidBrush colorBrush = new SolidBrush(this.WordArtForeColor);
                    g.DrawString(this.Caption, this.WordArtFont, grayBrush, new PointF(0, 20));
                    g.ResetTransform();
                    //绘制前景
                    g.DrawString(this.Caption, this.WordArtFont, colorBrush, new PointF(0,20));
                    break;
                case WordArtEffectStyle.embossment://浮雕效果
                    backBrush = Brushes.Black;
                    foreBrush = Brushes.White;

g.DrawString(this.Caption, this.WordArtFont, backBrush, posX + 1, posY + 1);
                    g.DrawString(this.Caption, this.WordArtFont, foreBrush, posX, posY );
                    break;
                case WordArtEffectStyle.forme://印版效果
                    int i = 0;
                    backBrush = new SolidBrush(this.WordArtBackColor);
                    foreBrush = new SolidBrush(this.WordArtForeColor);
                    while (i < 20)
                    {
                        g.DrawString(this.Caption, this.WordArtFont, backBrush, posX - i, posY + i);
                        i = i + 1;
                    }
                    g.DrawString(this.Caption, this.WordArtFont, foreBrush, posX, posY);
                    break;
                case WordArtEffectStyle.Reflection://倒影效果
                    backBrush = new SolidBrush(this.WordArtBackColor);
                    foreBrush = new SolidBrush(this.WordArtForeColor);

g.TranslateTransform(posX, posY);

int ascent = this.WordArtFont.FontFamily.GetCellAscent(this.WordArtFont.Style);
                    int spacing = this.WordArtFont.FontFamily.GetLineSpacing(this.WordArtFont.Style);
                    int lineHeight = System.Convert.ToInt16(this.WordArtFont.GetHeight(g));
                    int height = lineHeight * ascent / spacing;

GraphicsState state = g.Save();
                    g.ScaleTransform(1, -1.0f);
                    g.DrawString(this.Caption, this.WordArtFont, backBrush, 0, -height);
                    g.Restore(state);
                    g.DrawString(this.Caption,this.WordArtFont, foreBrush, 0, -height);
                    break;
                case WordArtEffectStyle.shadow://阴影效果
                    Brush shadowBrush = Brushes.Gray;
                    foreBrush = new SolidBrush(this.WordArtBackColor);
                    posX = (this.Width - Convert.ToInt16(size.Width)) / 4;
                    posY = (this.Height - Convert.ToInt16(size.Height)) / 3;
                    g.DrawString(this.Caption, this.WordArtFont, shadowBrush, posX + 20, posY + 20);
                    g.DrawString(this.Caption, this.WordArtFont, foreBrush, posX, posY);
                    break;
                case WordArtEffectStyle.grain://纹理的效果

break;

case WordArtEffectStyle.slope://倾斜
                    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(this.Caption, this.WordArtFont, foreBrush, 0, 0);
                    break;
                case WordArtEffectStyle.shadeLines://渐变
                    Brush ShadowBrush = Brushes.Gray;
                    PointF point = new PointF(0, 0);
                    RectangleF rectangle = new RectangleF(point, size);
                    Brush brush = new LinearGradientBrush(rectangle, Color.Red, Color.Green, LinearGradientMode.Horizontal);
                    int xwidth = (this.Width - Convert.ToInt16(size.Width)) / 2;
                    int xheight = (this.Height - Convert.ToInt16(size.Height)) / 2;
                    g.DrawString(this.Caption,this.WordArtFont, brush, xwidth, xheight);
                    break;
                case WordArtEffectStyle.circumgyrate://旋转
                    for (int n = 0; n <= 360; n += 30)
                    {
                        //平移到对象中心
                        g.TranslateTransform(this.Width / 2, this.Height / 2);
                        //设置Graphics对象的输出角度
                        g.RotateTransform(n);
                        //设置文字填充颜色
                        g.DrawString(this.Caption, this.WordArtFont, foreBrush, 0, 0);
                        //恢复全局变换矩阵
                        g.ResetTransform();
                    }
                    break;
            }
        }
    }
    public enum WordArtEffectStyle
    {
        //投影,浮雕,印版,倒影,阴影,纹理, 倾斜,渐变,旋转
        projection, embossment, forme, Reflection, shadow, grain, slope, shadeLines, circumgyrate
    }

C#编写的艺术字类方法的更多相关文章

  1. Spring Boot 2.x 综合示例-整合thymeleaf、mybatis、shiro、logging、cache开发一个文章发布管理系统

    一.概述 经过HelloWorld示例(Spring Boot 2.x 快速入门(上)HelloWorld示例)( Spring Boot 2.x 快速入门(下)HelloWorld示例详解)两篇的学 ...

  2. Spring MVC请求参数绑定 自定义类型转化 和获取原声带额servlet request response信息

    首先还在我们的框架的基础上建立文件 在domian下建立Account实体类 import org.springframework.stereotype.Controller; import org. ...

  3. 云服务器AWD平台搭建

    开学后实验室来了几个新同学,在线上CTF方面大家一直在持续学习,但AWD模式的CTF我们练习并不多,所以准备搭建一个AWD平台用于实验室成员的线下赛攻防练习. 最开始的是防灾科技大学的线下AWD靶场: ...

  4. 编写高质量代码:改善Java程序的151个建议(第8章:异常___建议114~117)

    建议114:不要在构造函数中抛出异常 Java异常的机制有三种: Error类及其子类表示的是错误,它是不需要程序员处理也不能处理的异常,比如VirtualMachineError虚拟机错误,Thre ...

  5. 编写高质量代码:改善Java程序的151个建议(第6章:枚举和注解___建议88~92)

    建议88:用枚举实现工厂方法模式更简洁 工厂方法模式(Factory Method Pattern)是" 创建对象的接口,让子类决定实例化哪一个类,并使一个类的实例化延迟到其它子类" ...

  6. iOS 触摸事件与UIResponder(内容根据iOS编程编写)

    触摸事件 因为 UIView 是 UIResponder 的子类,所以覆盖以下四个方法就可以处理四种不同的触摸事件: 1.  一根手指或多根手指触摸屏幕 - (void)touchesBegan:(N ...

  7. 分享:使用 TypeScript 编写的 JavaScript 游戏代码

    <上篇博客>我写出了我一直期望的 JavaScript 大型程序的开发模式,以及 TS(TypeScript) 的一些优势.博客完成之后,我又花了一天时间试用 TS,用它来重构之前编写的一 ...

  8. Unity调用Android类方法

    Unity调用Android类方法 1.  添加Unity的classes.jar文件 创建一个Android工程AndroidUnityDemo. 由于Unity的版本不同,直接在Unity安装包文 ...

  9. Objective-C 对象(内容根据iOS编程编写)

    开发iOS程序需要使用 Objective-C 语言和Cocoa Touch框架.Objective-C 源于 C 语言,是 C 语言的扩展. Cocoa Touch框架是一个Objective-C类 ...

随机推荐

  1. 干了这杯Java之ArrayList

    List存储一个有序元素合集 List接口的实现类有: ArrayList,LinkedList,Vector,Stack ArrayList一个数组型的List 默认容量为10 private st ...

  2. 基于RTKLIB构建高并发通信测试工具

    1. RTKLIB基础动态库生成 RTKLIB是全球导航卫星系统GNSS(global navigation satellite system)的标准&精密定位开源程序包,由日本东京海洋大学的 ...

  3. 关于Websockets问题:

     Websockets是一种与服务器进行全双工,双向通信的信道,它不使用http协议,他有自己的协议即自定义协议,ws协议:它的安全协议为wss协议.这种协议专门为快速传输小数据而设计的.对服务其有一 ...

  4. ZPL条码打印类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  5. 51nod 1522 上下序列

    题目描述 现在有1到n的整数,每一种有两个.要求把他们排在一排,排成一个2*n长度的序列,排列的要求是从左到右看,先是不降,然后是不升. 特别的,也可以只由不降序列,或者不升序列构成. 例如,下面这些 ...

  6. winPcap编程之不用回调方法捕获数据包(五 转)

    这一次要分析的实例程序跟上一讲非常类似(“打开适配器并捕获数据包”),略微不同的一点是本次将pcap_loop()函数替换成了pcap_next_ex()函数.本节的重点也就是说一下这两个函数之间的差 ...

  7. 前端魔法堂——异常不仅仅是try/catch

    前言  编程时我们往往拿到的是业务流程正确的业务说明文档或规范,但实际开发中却布满荆棘和例外情况,而这些例外中包含业务用例的例外,也包含技术上的例外.对于业务用例的例外我们别无它法,必须要求实施人员与 ...

  8. 最火的Android开源项目(一)

    摘要:对于开发者而言,了解当下比较流行的开源项目很是必要.利用这些项目,有时能够让你达到事半功倍的效果.为此,CSDN特整理了GitHub上最受欢迎的Android及iOS开源项目,本文详细介绍了20 ...

  9. win10 uwp 拖动控件

    我们会使用控件拖动,可以让我们做出好看的动画,那么我们如何移动控件,我将会告诉大家多个方法.其中第一个是最差的,最后的才是我希望大神你去用. Margin 移动 我们可以使用Margin移动,但这是w ...

  10. vue搭建项目前奏曲——vue-cli

    vue-cli是快速构建这个单页应用的脚手架,这个可是官方的.官方给的建议,如果你是初次尝试Vue,哪就老老实实用普通的书写引入js文件,这里牵扯太多的东西,例如webpack.Node.js.npm ...