содержание
Реализовать текст с эффектом фотокопии
Текст, реализующий наклонный эффект
Реализовать масштабированный текст
Отраженный текст
Идея: Нарисуйте текст с эффектом отражения, используя методы MeasureString и ScaleTransform объекта Graphics.
- Метод строки измерения. Этот метод используется для измерения строки, нарисованной в указанном формате Font. Формат синтаксиса следующий:
public SizeF MeasureString(string text,Font font)
параметр:
текст: Строка для измерения.
font: Шрифт, который определяет текстовый формат строки.
Возвращаемое значение: структура SizeF, представляющая размер строки, заданной параметром text и нарисованной параметром font.Единица задается свойством PageUnit.
- Метод 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 для реализации эффекта проекции текста.
- Масштабный метод. Этот метод применяет указанный вектор масштаба к объекту Matrix путем предварительного вычисления вектора масштаба. Формат синтаксиса следующий:
public void Scale(float scaleX,float scaley)
scaleX: значение, на которое масштабируется объект Matrix по оси X.
scaleY: значение, на которое масштабируется объект Matrix по оси Y.
- Метод сдвига. Этот метод применяет указанный вектор сдвига к объекту Matrix, вычисляя преобразование сдвига с помощью Xi'an. Синтаксис следующий: public void Shear(float shearX,float shearY)
Описание параметра:
shearX: Коэффициент горизонтального сдвига.
shearY: коэффициент вертикального сдвига.
- Метод перевода. Этот метод применяет указанный вектор преобразования (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
}
}