GDI+——常用的文字處理技術

目錄

 

倒影效果的文字

設置投影效果的文字

實現影印版效果文字

實現陰影效果的文字

實現傾斜效果的文字

實現漸變效果的文字

實現縮放文字

實現輝光效果的文字


倒影效果的文字

思路:通過使用Graphics對象的MeasureString方法和ScaleTransform方法來繪製倒影效果的文字。

  1. MeasureString方法。該方法用於測量指定的Font格式繪製的字符串。語法格式如下:

public SizeF MeasureString(string text,Font font)

參數:

text:要測量的字符串。

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

返回值:SizeF結構,該結構表示text參數指定的、使用font參數繪製的字符串的大小,單位有PageUnit屬性指定。

  1. ScaleTransform方法。該方法指定的縮放操作應用於Graphics對象的變換矩陣。語法格式如下:

public void ScaleTransform(float sx,float sy)

參數說明:

sx:x方向的比例因子。

sy:y方向的比例因子。

 

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方法實現文字的投影效果。

  1. Scale方法。該方法通過預先計算比例向量,將制定的比例向量應用到Matrix對象。語法格式如下:

public void Scale(float scaleX,float scaley)

scaleX:Matrix對象在X軸方法縮放的值。

scaleY:Matrix對象在Y軸方法縮放的值。

  1. Shear方法。該方法通過與西安計算切變變換,將指定的切變向量應用到Matrix對象。語法格式如下:public void Shear(float shearX,float shearY)

參數說明:

shearX:水平切邊因子。

shearY:垂直切邊因子。

  1. Translate方法。該方法通過預先計算轉換向量,將指定的轉換向量(offsetX和offsetY)應用到Matrix對象。語法格式如下:public void Translate(float offset,float offsetY)

參數說明:

offsetX:x值,通過它轉換Matrix對象。

offsetY:y值,通過它轉換Matrix對象。

 

        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方法再指定的文字繪製文字,直到其具有一定的厚度。

 

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方法在指定的位置繪製陰影效果的文字。

 

  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方法繪製傾斜文字。

 

   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(畫刷)。

       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);//繪製文字

        }

實現縮放文字

 

        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方法繪製輝光效果的文字。

  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

            }

        }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章