C#编写的艺术字类方法
代码如下:
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#编写的艺术字类方法的更多相关文章
- Spring Boot 2.x 综合示例-整合thymeleaf、mybatis、shiro、logging、cache开发一个文章发布管理系统
一.概述 经过HelloWorld示例(Spring Boot 2.x 快速入门(上)HelloWorld示例)( Spring Boot 2.x 快速入门(下)HelloWorld示例详解)两篇的学 ...
- Spring MVC请求参数绑定 自定义类型转化 和获取原声带额servlet request response信息
首先还在我们的框架的基础上建立文件 在domian下建立Account实体类 import org.springframework.stereotype.Controller; import org. ...
- 云服务器AWD平台搭建
开学后实验室来了几个新同学,在线上CTF方面大家一直在持续学习,但AWD模式的CTF我们练习并不多,所以准备搭建一个AWD平台用于实验室成员的线下赛攻防练习. 最开始的是防灾科技大学的线下AWD靶场: ...
- 编写高质量代码:改善Java程序的151个建议(第8章:异常___建议114~117)
建议114:不要在构造函数中抛出异常 Java异常的机制有三种: Error类及其子类表示的是错误,它是不需要程序员处理也不能处理的异常,比如VirtualMachineError虚拟机错误,Thre ...
- 编写高质量代码:改善Java程序的151个建议(第6章:枚举和注解___建议88~92)
建议88:用枚举实现工厂方法模式更简洁 工厂方法模式(Factory Method Pattern)是" 创建对象的接口,让子类决定实例化哪一个类,并使一个类的实例化延迟到其它子类" ...
- iOS 触摸事件与UIResponder(内容根据iOS编程编写)
触摸事件 因为 UIView 是 UIResponder 的子类,所以覆盖以下四个方法就可以处理四种不同的触摸事件: 1. 一根手指或多根手指触摸屏幕 - (void)touchesBegan:(N ...
- 分享:使用 TypeScript 编写的 JavaScript 游戏代码
<上篇博客>我写出了我一直期望的 JavaScript 大型程序的开发模式,以及 TS(TypeScript) 的一些优势.博客完成之后,我又花了一天时间试用 TS,用它来重构之前编写的一 ...
- Unity调用Android类方法
Unity调用Android类方法 1. 添加Unity的classes.jar文件 创建一个Android工程AndroidUnityDemo. 由于Unity的版本不同,直接在Unity安装包文 ...
- Objective-C 对象(内容根据iOS编程编写)
开发iOS程序需要使用 Objective-C 语言和Cocoa Touch框架.Objective-C 源于 C 语言,是 C 语言的扩展. Cocoa Touch框架是一个Objective-C类 ...
随机推荐
- RabbitMQ高可用集群配置
1.安装RabbitMQ 1)下载和安装erlang 下载erlang wget http://www.rabbitmq.com/releases/erlang/erlang-18.1-1.el6.x ...
- 【疑问】用python写登录验证遇到的问题
最近开始断断续续学习python,今天加入博客园,作为新人,和各位老师们讨教了,以后多多照顾!为了大家能看清楚所以就截图了,文末尾附源码,说不定会有那位老师给我指教一番.############### ...
- #云栖大会# 移动安全专场——APP渠道推广作弊攻防那些事儿(演讲速记)
导语: 如今,移动互联网浪潮进入白热化竞争态势,APP渠道传播成为很多企业常用的推广方式,APP推广费用也在水涨船高,从PC时代的一个装机0.5元到1元不等,到移动互联网时代的5元,甚至几十元,但为什 ...
- kubeernetes节点资源限制
实际应用中发现,部分节点性能不足,某些较大的服务如果跑在这些机器上.会很快消耗该机器的内存和cpu资源,如果用uptime看一下的就会发现负载特别高(合理的范围这个值应该等于cpu个数),高到一定值就 ...
- win10 uwp 应用转后台清理内存
我在写小说阅读器,把每个打开的文件的内容读到内存,因为小说都很小,所以放在内存不怕太大,但是我如果打开了一本小说,再打开一本,我不会把先打开的小说的内容清除掉,在内存.所以一旦我打开多小说的时候,内存 ...
- nodejs项目管理之supervisor||pm2||forever
supervisor 是开发环境用. forever 管理多个站点,每个站访问量不大,不需要监控. pm2 网站访问量比较大,需要完整的监控界面. supervisor 特点: 代码修改,实时重启 安 ...
- jfinal拦截器配置
实现aop @Before(Tx.class) public void index(){ // renderText("hello world!"); render("/ ...
- Prometheus 到底 NB 在哪里?- 每天5分钟玩转 Docker 容器技术(84)
本节讨论 Prometheus 的核心,多维数据模型.我们先来看一个例子. 比如要监控容器 webapp1 的内存使用情况,最传统和典型的方法是定义一个指标 container_memory_usag ...
- JPA + SpringData 操作数据库原来可以这么简单 ---- 深入了解 JPA - 2
原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7704914.html ------------------------------------ ...
- 入侵必练的CMD命令
入侵必练的CMD命令 我们都知道和目标主机建立IPC$连接后,要把后门,木马之类的软件传过去,其实这个命令是DOS基础的 命令,我这里就写个格式. 一.呵呵,命令一写就知道了吧,在网上看的太多了,其他 ...