GDI+ — широко используемая технология обработки текстов.

искусственный интеллект

содержание

 

Отраженный текст

Установите текст эффекта тени

Реализовать текст с эффектом фотокопии

Текст с эффектом тени

Текст, реализующий наклонный эффект

Текст с эффектом градиента

Реализовать масштабированный текст

Текст с эффектом свечения


Отраженный текст

Идея: Нарисуйте текст с эффектом отражения, используя методы MeasureString и ScaleTransform объекта Graphics.

  1. Метод строки измерения. Этот метод используется для измерения строки, нарисованной в указанном формате Font. Формат синтаксиса следующий:

public SizeF MeasureString(string text,Font 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();//Класс графики элемента управления Chuangjian

g.Clear(Color.White);//Очистить фон элемента управления указанным цветом

Кисть Var_Brush_Back = Brushes.Gray;//Устанавливаем цвет переднего плана

Кисть 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);//Рисуем текст отражения

        }

Установите текст эффекта тени

Этот пример в основном использует метод Scale, метод Shear и метод Translate объекта Matrix для реализации эффекта проекции текста.

  1. Масштабный метод. Этот метод применяет указанный вектор масштаба к объекту Matrix путем предварительного вычисления вектора масштаба. Формат синтаксиса следующий:

public void Scale(float scaleX,float scaley)

scaleX: значение, на которое масштабируется объект Matrix по оси X.

scaleY: значение, на которое масштабируется объект Matrix по оси Y.

  1. Метод сдвига. Этот метод применяет указанный вектор сдвига к объекту Matrix, вычисляя преобразование сдвига с помощью Xi'an. Синтаксис следующий: public void Shear(float shearX,float shearY)

Описание параметра:

shearX: Коэффициент горизонтального сдвига.

shearY: коэффициент вертикального сдвига.

  1. Метод перевода. Этот метод применяет указанный вектор преобразования (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();//Создаем экземпляр класса Graphics элемента управления panel1

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();//Класс графики элемента управления Chuangjian

g.Clear(Color.White);//Очистить фон элемента управления указанным цветом

Кисть Var_Brush_Back = Brushes.Black;//Устанавливаем цвет переднего плана

Кисть Var_Brush_Fore = Кисти.Аквамарин;//Установить цвет фона

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);//Рисуем текст

        }

Текст с эффектом тени

Идея: Используйте метод DrawString объекта Graphics, чтобы нарисовать текст с эффектом тени в указанной позиции.

 

  private void button1_Click(object sender, EventArgs e)

        {

Graphics g = panel1.CreateGraphics();//Класс графики элемента управления Chuangjian

g.Clear(Color.White);//Очистить фон элемента управления указанным цветом

Кисть Var_Brush_Back = Brushes.Gray;//Устанавливаем цвет переднего плана

Кисть Var_Brush_Fore = Brushes.Black;//Устанавливаем цвет фона

Font Var_Font = new Font("Black Body", 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);//Рисуем текст

        }

Текст, реализующий наклонный эффект

Идея: сначала используйте метод Shear объекта Matrix, чтобы установить наклон текста, а затем используйте метод DrawString объекта Graphics, чтобы нарисовать наклонный текст.

 

   private void button1_Click(object sender, EventArgs e)

        {

Graphics g = panel1.CreateGraphics();//Класс графики элемента управления Chuangjian

g.Clear(Color.White);//Очистить фон элемента управления указанным цветом

Кисть Var_Brush_Back = Brushes.Black;//Устанавливаем цвет переднего плана

Кисть Var_Brush_Fore = Brushes.Aquamarine;//Устанавливаем цвет фона

Font Var_Font = new Font("宋体", 40);//Установить стиль шрифта

//установить строку 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 инкапсулирует кисть с линейным градиентом.

       private void button1_Click(object sender, EventArgs e)

        {

Graphics g = panel1.CreateGraphics();//Класс графики элемента управления Chuangjian

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();//Класс графики элемента управления Chuangjian

g.Clear(Color.White);//Очистить фон элемента управления указанным цветом

Brush Var_Back = Brushes.Black;//Устанавливаем кисть

FontFamily Var_FontFamily = new FontFamily("Song Ti");//Устанавливаем стиль шрифта

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);//Рисуем масштабированный текст

        }

Текст с эффектом свечения

Идея: использовать свойства SmoothingMode, InterpolationMode и TextRenderingHint объекта Graphics, чтобы установить качество отрисовываемого текста, а затем использовать его метод DrawImageUnscaled для отрисовки светящегося текста.

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

        {

Bitmap Var_Bitmap = null;//Создаем экземпляр класса Bitmap

Используя (Graphics g = Graphics.FromHwnd(IntPtr.Zero))//Создаем экземпляр класса Graphics

            {

SizeF Var_Size = g.MeasureString(Str, F);//Измеряем строку

Используя (Bitmap Var_bmp = new Bitmap((int)Var_Size.Width, (int)Var_Size.Height))//Создаем экземпляр класса Bitmap по размеру текста

Используя (Graphics Var_G_Bmp = Graphics.FromImage(Var_bmp))//Создаем экземпляр класса Bitmap

Используя (SolidBrush Var_BrushBack = new SolidBrush(Color.FromArgb(16, ColorBack.R, ColorBack.G, ColorBack.B)))//Определяем кисть в соответствии со значением RGB

Использование (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 в соответствии с размером текста свечения

Используя (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)

        {

Используя (Font fnt = new Font("Arial", 36, FontStyle.Bold))//Определяем шрифт

            {

panel1.BackgroundImage = (Bitmap)ImageLightEffect("Текст эффекта свечения", fnt, Color.Yellow, Color.Red, 10);//Вызываем пользовательский метод ImageLightEffect

            }

        }