C# 实现 光晕文字 发光文字

Posted on 2020-03-13 23:49  轻吟浅唱,蓦然花开  阅读(1043)  评论(0编辑  收藏  举报

有时候想要把字体整得好看一点,但是不不想去下载素材,那么怎么办呢?我有一段时间就特别想把标题整得花里胡哨的,做成一个标题控件造轮子。好了话不多少,先看效果:

 

 给了效果图,说一下原理吧,如果我们把文字向各个方向多绘制几次,那么文字是不是会变粗呢?大家明显可以想象得到效果,仅仅变粗的文字肯定是不美观的。

我们方式座做一些改变,绘制的时候加上Alpha分量,每次向外绘制的时候,就增加一下透明度。假如我们要绘制的光晕是黑色,效果如下图:

 

 显而易见,出现了朦胧的感觉,如果我们在绘制的起始点,也就是中心,绘制一下其它颜色,比如黄色,看一下效果会怎样呢?

 

 

 是不是效果就好看多了呢。不多说了,最后上代码:(注意,我这里为了演示,就没有写得特别复杂,也没有做成控件,写在OnPaint里面的哈)

 1 protected override void OnPaint(PaintEventArgs e)
 2         {
 3             base.OnPaint(e);
 4             Color  shadowColor = Color.Black;//光晕的颜色
 5             int shadowWidth = 6;//光晕的宽度
 6             string text = "最美的文字是汉字";//文本
 7             Font font = new Font("华文行楷",18);//字体
 8             Graphics g = e.Graphics;//画板
 9             SizeF size = g.MeasureString(text, font);
10             PointF point = new PointF(this.ClientSize.Width / 2 - size.Width / 2, this.ClientSize.Height / 2 - size.Height / 2);
11             for (int i = 0; i < shadowWidth; i++)
12             {
13                 for (int j = 0; j < shadowWidth; j++)
14                 {
15                     g.DrawString(text, font, new SolidBrush(Color.FromArgb(255 / 5 / (i + 1), shadowColor)), new PointF(point.X + i, point.Y + j));
16                 }
17                 for (int j = 0; j < shadowWidth; j++)
18                 {
19                     g.DrawString(text, font, new SolidBrush(Color.FromArgb(255 / 5 / (i + 1), shadowColor)), new PointF(point.X - i, point.Y - j));
20                 }
21             }
22             for (int i = 0; i < shadowWidth; i++)
23             {
24                 g.DrawString(text, font, new SolidBrush(Color.FromArgb(255 / 3 / (i + 1), shadowColor)), new PointF(point.X - i, point.Y + i));
25             }
26             for (int i = 0; i < shadowWidth; i++)
27             {
28                 g.DrawString(text, font, new SolidBrush(Color.FromArgb(255 / 3 / (i + 1), shadowColor)), new PointF(point.X + i, point.Y - i));
29             }
30             g.DrawString(text, font,Brushes.Yellow, point);//本身的颜色
31         }
View Code