GDI+——常用的文字处理技术

简介: GDI+——常用的文字处理技术

目录



倒影效果的文字


设置投影效果的文字


实现影印版效果文字


实现阴影效果的文字


实现倾斜效果的文字


实现渐变效果的文字


实现缩放文字


实现辉光效果的文字


倒影效果的文字

思路:通过使用Graphics对象的MeasureString方法和ScaleTransform方法来绘制倒影效果的文字。


MeasureString方法。该方法用于测量指定的Font格式绘制的字符串。语法格式如下:

public SizeF MeasureString(string text,Font font)


参数:


text:要测量的字符串。


font:Font,它定义字符串的文本格式。


返回值:SizeF结构,该结构表示text参数指定的、使用font参数绘制的字符串的大小,单位有PageUnit属性指定。


ScaleTransform方法。该方法指定的缩放操作应用于Graphics对象的变换矩阵。语法格式如下:

public void ScaleTransform(float sx,float sy)


参数说明:


sx:x方向的比例因子。


sy:y方向的比例因子。

tt.png

private void button1_Click(object sender, EventArgs e)


       {


           Graphics g = panel1.CreateGraphics();//创健控件的Graphics类


           g.Clear(Color.White);//以指定的颜色清除控件背景


           Brush Var_Brush_Back = Brushes.Gray;//设置前景色


           Brush Var_Brush_Fore = Brushes.Black;//设置背景色


           Font Var_Font = new Font("宋体", 40);//设置字体样式


           string Var_Str = "倒影效果的文字";//设置字符串


           SizeF Var_Size = g.MeasureString(Var_Str, Var_Font);//获取字符串的大小


           g.DrawString(Var_Str, Var_Font, Var_Brush_Fore, 0, 0);//绘制文本


           g.ScaleTransform(1, -1.0F);//缩放变换矩阵


           g.DrawString(Var_Str, Var_Font, Var_Brush_Back, 0, -Var_Size.Height * 1.6F);//绘制倒影文本


       }


设置投影效果的文字

本实例主要使用Matrix对象的Scale方法、Shear方法和Translate方法实现文字的投影效果。


Scale方法。该方法通过预先计算比例向量,将制定的比例向量应用到Matrix对象。语法格式如下:

public void Scale(float scaleX,float scaley)


scaleX:Matrix对象在X轴方法缩放的值。


scaleY:Matrix对象在Y轴方法缩放的值。


Shear方法。该方法通过与西安计算切变变换,将指定的切变向量应用到Matrix对象。语法格式如下:public void Shear(float shearX,float shearY)

参数说明:


shearX:水平切边因子。


shearY:垂直切边因子。


Translate方法。该方法通过预先计算转换向量,将指定的转换向量(offsetX和offsetY)应用到Matrix对象。语法格式如下:public void Translate(float offset,float offsetY)

参数说明:


offsetX:x值,通过它转换Matrix对象。


offsetY:y值,通过它转换Matrix对象。

tt.png

private void button1_Click(object sender, EventArgs e)


       {


           Graphics g = panel1.CreateGraphics();//实例化panel1控件的Graphics类


           g.Clear(Color.White);//以白色清空panel1的背景


           g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;//设置文本输出的质量


           g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//消除绘制时出现的锯齿


           Font Var_Font = new Font("宋体", 48);//定义文字的字体


           Matrix Var_Matrix = new Matrix();//实例化Matrix类


           Var_Matrix.Shear(-1.4F, 0.0F);//设置投影


           Var_Matrix.Scale(1, 0.5F);//设置缩放


           Var_Matrix.Translate(168, 118);//设置平移


           g.Transform = Var_Matrix;//设置坐标平面变换


           SolidBrush Var_Brush_1 = new SolidBrush(Color.Gray);//设置文字的画刷


           SolidBrush Var_Brush_2 = new SolidBrush(Color.SlateBlue);//设置投影的画刷


           string Var_Str = "投影效果文字";//设置文字


           g.DrawString(Var_Str, Var_Font, Var_Brush_1, new PointF(0, 60));//绘制投影


           g.ResetTransform();//变换矩阵重置为单位矩阵


           g.DrawString(Var_Str, Var_Font, Var_Brush_2, new PointF(0, 60));//绘制文字


       }


实现影印版效果文字

思路:使用DrawString方法再指定的文字绘制文字,直到其具有一定的厚度。

tt.png

private void button1_Click(object sender, EventArgs e)


       {


           Graphics g = panel1.CreateGraphics();//创健控件的Graphics类


           g.Clear(Color.White);//以指定的颜色清除控件背景


           Brush Var_Brush_Back = Brushes.Black;//设置前景色


           Brush Var_Brush_Fore = Brushes.Aquamarine;//设置背景色


           Font Var_Font = new Font("宋体", 40);//设置字体样式


           string Var_Str = "印版效果的文字";//设置字符串


           SizeF Var_Size = g.MeasureString(Var_Str, Var_Font);//获取字符串的大小


           int Var_X = (panel1.Width - Convert.ToInt32(Var_Size.Width)) / 2;//设置平移的X坐标


           int Var_Y = (panel1.Height - Convert.ToInt32(Var_Size.Height)) / 2;设置平移的Y坐标


           //实现印版文字


           for (int i = 0; i < 10; i++)


           {


               g.DrawString(Var_Str, Var_Font, Var_Brush_Back, Var_X - i, Var_Y + i);


           }


           g.DrawString(Var_Str, Var_Font, Var_Brush_Back, Var_X, Var_Y);//绘制文字


       }


实现阴影效果的文字

思路:使用Graphics对象的DrawString方法在指定的位置绘制阴影效果的文字。

tt.png

 private void button1_Click(object sender, EventArgs e)


       {


           Graphics g = panel1.CreateGraphics();//创健控件的Graphics类


           g.Clear(Color.White);//以指定的颜色清除控件背景


           Brush Var_Brush_Back = Brushes.Gray;//设置前景色


           Brush Var_Brush_Fore = Brushes.Black;//设置背景色


           Font Var_Font = new Font("黑体", 40,FontStyle.Bold);//设置字体样式


           string Var_Str = "阴影效果的文字";//设置字符串


           SizeF Var_Size = g.MeasureString(Var_Str, Var_Font);//获取字符串的大小


           int Var_X = (panel1.Width - Convert.ToInt32(Var_Size.Width)) / 2;//设置平移的X坐标


           int Var_Y = (panel1.Height - Convert.ToInt32(Var_Size.Height)) / 2;//设置平移的Y坐标


           g.DrawString(Var_Str, Var_Font, Var_Brush_Back, Var_X + 3, Var_Y + 2);//绘制文字的阴影


           g.DrawString(Var_Str, Var_Font, Var_Brush_Fore, Var_X, Var_Y);//绘制文字


       }


实现倾斜效果的文字

思路:首先使用Matrix对象的Shear方法设置文字的倾斜度,然后使用Graphics对象的DrawString方法绘制倾斜文字。


 

tt.png

 private void button1_Click(object sender, EventArgs e)


       {


           Graphics g = panel1.CreateGraphics();       //创健控件的Graphics类


           g.Clear(Color.White);           //以指定的颜色清除控件背景


           Brush Var_Brush_Back = Brushes.Black;       //设置前景色


           Brush Var_Brush_Fore = Brushes.Aquamarine;                  //设置背景色


           Font Var_Font = new Font("宋体", 40);                       //设置字体样式


           string Var_Str = "倾斜效果的文字";          //设置字符串


           SizeF Var_Size = g.MeasureString(Var_Str, Var_Font);    //获取字符串的大小


           int Var_X = (panel1.Width - Convert.ToInt32(Var_Size.Width)) / 2;   //设置平移的X坐标


           int Var_Y = (panel1.Height - Convert.ToInt32(Var_Size.Height)) / 2; //设置平移的Y坐标


           g.TranslateTransform(Var_X, Var_Y);                     //更改坐标系原点


           Matrix Var_Trans = g.Transform;         //获取几何世界的变换复本


           Var_Trans.Shear(0.40F, 0.00F);          //通过预先计算切变变换


           g.Transform = Var_Trans;                                //文字的左倾斜


           g.DrawString(Var_Str, Var_Font, Var_Brush_Back, 5, 5);      //绘制文字


       }


实现渐变效果的文字

思路:LinearGradientBrush类来设置文字的渐变效果。LinearGradientBrush类使用线性渐变封装Brush(画刷)。


tt.png

private void button1_Click(object sender, EventArgs e)


       {


           Graphics g = panel1.CreateGraphics();       //创健控件的Graphics类


           g.Clear(Color.White);       //以指定的颜色清除控件背景


           Color Var_Color_Up = Color.Red;         //设置前景色


           Color Var_Color_Down = Color.Yellow;        //设置背景色


           Font Var_Font = new Font("宋体", 40);       //设置字体样式


           string Var_Str = "渐变效果的文字";      //设置字符串


           SizeF Var_Size = g.MeasureString(Var_Str, Var_Font);//获取字符串的大小


           PointF Var_Point = new PointF(5, 5);//设置文字的显示位置


           RectangleF Var_Rect = new RectangleF(Var_Point, Var_Size);//根据文字的大小及位置,实例化RectangleF类


           LinearGradientBrush Var_LinearBrush = new LinearGradientBrush(Var_Rect, Var_Color_Up, Var_Color_Down,


       LinearGradientMode.Horizontal); //设置从左到右的线性渐变效果


           g.DrawString(Var_Str, Var_Font, Var_LinearBrush, Var_Point);//绘制文字


       }


实现缩放文字

tt.png

private void button1_Click(object sender, EventArgs e)


       {


           Graphics g = panel1.CreateGraphics();   //创健控件的Graphics类


           g.Clear(Color.White);//以指定的颜色清除控件背景


           Brush Var_Back = Brushes.Black; //设置画刷


           FontFamily Var_FontFamily = new FontFamily("宋体");//设置字体样式


           string Var_Str = "缩放文字";//设置字符串


           GraphicsPath Var_Path = new GraphicsPath();//实例化GraphicsPath对象


           //在路径中添加文本


           Var_Path.AddString(Var_Str, Var_FontFamily, (int)FontStyle.Regular, 50, new Point(0, 0), new StringFormat());


           PointF[] Var_PointS = Var_Path.PathPoints;//获取路径中的点


           Byte[] Car_Types = Var_Path.PathTypes;//获取相应点的类型


           Matrix Var_Matrix = new Matrix(Convert.ToSingle(textBox1.Text), 0.0F, 0.0F, Convert.ToSingle(textBox1.Text), 0.0F,


       0.0F);  //设置仿射矩阵


           Var_Matrix.TransformPoints(Var_PointS);//设置几何变换


           GraphicsPath Var_New_Path = new GraphicsPath(Var_PointS, Car_Types);//对GraphicsPath类进行初始化


           g.FillPath(Var_Back, Var_New_Path);//绘制缩放的文字


       }


实现辉光效果的文字

思路:使用Graphics对象的SmoothingMode、InterpolationMode和TextRenderingHint属性对绘制文字的质量进行设置,然后使用其DrawImageUnscaled方法绘制辉光效果的文字。

tt.png

 public static Image ImageLightEffect(string Str, Font F, Color ColorFore, Color ColorBack, int BlurConsideration)


       {


           Bitmap Var_Bitmap = null;//实例化Bitmap类


           using (Graphics g = Graphics.FromHwnd(IntPtr.Zero))//实例化Graphics类


           {


               SizeF Var_Size = g.MeasureString(Str, F);//对字符串进行测量


               using (Bitmap Var_bmp = new Bitmap((int)Var_Size.Width, (int)Var_Size.Height))//通过文字的大小实例化Bitmap类


               using (Graphics Var_G_Bmp = Graphics.FromImage(Var_bmp))//实例化Bitmap类


               using (SolidBrush Var_BrushBack = new SolidBrush(Color.FromArgb(16, ColorBack.R, ColorBack.G, ColorBack.B)))//根据RGB的值定义画刷


               using (SolidBrush Var_BrushFore = new SolidBrush(ColorFore))//定义画刷


               {


                   Var_G_Bmp.SmoothingMode = SmoothingMode.HighQuality;//设置为高质量


                   Var_G_Bmp.InterpolationMode = InterpolationMode.HighQualityBilinear;//设置为高质量的收缩


                   Var_G_Bmp.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;//消除锯齿


                   Var_G_Bmp.DrawString(Str, F, Var_BrushBack, 0, 0);//给制文字


                   Var_Bitmap = new Bitmap(Var_bmp.Width + BlurConsideration, Var_bmp.Height + BlurConsideration);//根据辉光文字的大小实例化Bitmap类


                   using (Graphics Var_G_Bitmap = Graphics.FromImage(Var_Bitmap))//实例化Graphics类


                   {


                       Var_G_Bitmap.SmoothingMode = SmoothingMode.HighQuality;//设置为高质量


                       Var_G_Bitmap.InterpolationMode = InterpolationMode.HighQualityBilinear;//设置为高质量的收缩


                       Var_G_Bitmap.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;//消除锯齿


                       //遍历辉光文字的各象素点


                       for (int x = 0; x <= BlurConsideration; x++)


                       {


                           for (int y = 0; y <= BlurConsideration; y++)


                           {


                               Var_G_Bitmap.DrawImageUnscaled(Var_bmp, x, y);//绘制辉光文字的点


                           }


                       }


                       Var_G_Bitmap.DrawString(Str, F, Var_BrushFore, BlurConsideration / 2, BlurConsideration / 2);//绘制文字


                   }


               }


           }


           return Var_Bitmap;//返回辉光效果的文字


       }


       private void button1_Click(object sender, EventArgs e)


       {


           using (Font fnt = new Font("Arial", 36, FontStyle.Bold))//定义字体


           {


               panel1.BackgroundImage = (Bitmap)ImageLightEffect("辉光效果的文字", fnt, Color.Yellow, Color.Red, 10);//调用自定义方法ImageLightEffect


           }


       }



tt.png

 


tt.png



 


tt.png

目录
相关文章
|
存储 前端开发 PHP
体育直播系统短视频上传流程:七牛云对接的实现思路和核心代码示例
东莞梦幻网络科技体育直播系统实现短视频上传功能,基于ThinkPHP+MySQL+Redis+七牛云架构。流程包括前端获取上传凭证、客户端上传视频至七牛云、七牛回调服务器验证签名并入库,涵盖上传策略、回调验证与存储路径规范。核心代码展示如何生成上传Token、前端上传及回调处理,确保安全高效上传。
|
12月前
|
机器学习/深度学习 监控 TensorFlow
蜜蜂数据的采集与处理方法-蜜蜂目标检测数据集(7000张图片已标注划分)
随着人工智能和计算机视觉技术的不断发展,目标检测任务在多个领域中都得到了广泛的应用。尤其是在农业和生态研究领域,自动化目标检测技术逐渐成为提高生产效率、保障生态环境的重要工具。蜜蜂作为生态系统中的关键物种,其活动的监控和分析对农业、生态环境保护及科学研究都具有重要意义。
|
11月前
|
传感器 存储 人工智能
2026年企业级网络监控选型指南
2026年十大IT监控工具深度解析:从OpManager的全能均衡,到Zabbix的极致灵活,再到Datadog的云原生领先,覆盖混合云、AIOps与成本控制。无论你是中小企业求稳,还是大型企业追优,亦或技术极客自研,都能找到适配之选。选型不再盲从,洞察趋势方能致远。
772 0
|
机器学习/深度学习 人工智能 自然语言处理
大模型
大模型正重塑数字世界,以千亿级参数和深度学习技术驱动AI革命。它赋能内容生成、智能交互与知识服务,同时带来伦理、隐私与能耗挑战。未来需走向高效、可信、向善的可持续发展之路。
|
Windows
dllhost.exe进程占用CPU很高怎么解决?
全面解析dllhost.exe进程
2711 16
|
Java 测试技术 API
自动化测试框架深度解析与选择指南
Apache JMeter是Apache组织基于Java开发的一款压力测试工具,旨在测试软件的性能承受能力。它支持多种协议测试及功能测试,提供灵活的断言创建能力,如同创建带断言的脚本来验证程序是否返回预期结果。
|
前端开发 Linux C#
一款开源、免费、美观的 Avalonia UI 原生控件库 - Semi Avalonia
一款开源、免费、美观的 Avalonia UI 原生控件库 - Semi Avalonia
2053 10
|
安全 编译器 C++
constexpr、const和 #define 的比较
本文比较了 `constexpr`、`const` 和 `#define` 在 C++ 中定义常量和函数的优缺点。`constexpr` 用于编译期求值,提供更高的性能和类型安全性;`const` 保证变量在运行期间不可修改,增强代码可靠性;`#define` 用于宏定义,适用于简单的常量和跨平台兼容性。选择时应根据具体需求和代码上下文决定。
|
存储 Serverless C++
【C++入门到精通】哈希 (STL) _ unordered_map _ unordered_set [ C++入门 ]
【C++入门到精通】哈希 (STL) _ unordered_map _ unordered_set [ C++入门 ]
774 1
|
Python
【Python基础】- break和continue语句
【Python基础】- break和continue语句
425 1