Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Благодарности 26 страница






В частности, свойства Width и Height содержат размеры загруженного изображения в дюймах. Чтобы пересчитать эти значения в пикселы для отображения на экране, нам потребуются свойства HorizontalResolution и VerticalResolution. Первое из них содержит количество пискелов в пересчет на один дюйм изображения по горизонтали, а второе — по вертикали.

Таким образом, чтобы получить размеры изображения в пикселах, нам нужно воспользоваться следующим выражением:

SizeF size = new SizeF(img.Width / img.HorizontalResolution,
img.Height / img.VerticalResolution);

Размеры изображения получаются в виде объекта класса SizeF, в котором определены свойства Width и Height.

Зная размеры окна winRect.Width и winRect.Height, в котором мы будем рисовать изображение, а также размеры изображения size.Width и size.Height, мы вычисляем масштаб, необходимый для того, чтобы изображение полностью поместилось в окне:

float scale = Math.Min(winRect.Width / size.Width,
winRect.Height / size.Height);

Здесь с помощью метода Math.Min мы выбираем наименьшее среди отношений ширины и высоты окна к ширине и высоте изображения.

Полученный масштаб используется для вычисления новых размеров изображения:

size.Width *= scale;
size.Height *= scale;

И, наконец, последнее действие — рисование изображения:

e.Graphics.DrawImage(img,
winRect.X + (winRect.Width - size.Width) / 2,
winRect.Y + (winRect.Height - size.Height) / 2,
size.Width, size.Height);

Через первый параметр методу Graphics.DrawImage передается изображение, загруженное при выполнении операции буксировки. Второй и третий параметры задают координаты верхнего левого угла прямоугольной области, в которой будет нарисовано изображение, а четвертый и пятый — размеры этой области. При рисовании будет выполнено масштабирование.

Расположение прямоугольной области выбирается таким образом, чтобы изображение было отцентрировано в окне приложения при любых размерах изображения. Результат работы приложения ImageViewApp показан на рис. 10-21.

Рис. 10-21. Просмотр изображений в окне приложения PictureViewer

Заметим, что помимо метода DrawImage, в классе Graphics определен метод DrawImageUnscaled. Этот метод аналогичен методу DrawImage, но отличается от него тем, что при рисовании не выполняет масштабирование изображения.

Рисование текста

Еще один важный метод, определенный в классе Graphics, это метод DrawString. С помощью этого метода приложения могут рисовать в своих окнах текстовые строки.

Напомним, что ранее мы уже пользовались методом DrawString в приложении PaintApp, описанном в разделе «Событие Paint» этой главы. Мы вызвали этот метод в обработчике события Form1_Paint, как это показано ниже:

public string text;

text = " Обработка события Paint";

private void Form1_Paint(object sender,
System.Windows.Forms.PaintEventArgs e)
{
Graphics g = e.Graphics;

g.Clear(Color.White);
g.DrawString(text, new Font(" Helvetica", 15),
Brushes.Black, 0, 0);

}

В качестве первого параметра методу DrawString передается текстовая строка, которую нужно нарисовать.

Второй параметр задает шрифт. О шрифтах мы расскажем ниже, в разделе «Инструменты для рисования». С помощью третьего параметра задается кисть, с применением которой будет нарисован текст. И, наконец, два последних параметра определяют координаты точки, в которой начнется рисование текста.

В классе Graphics определено несколько перегруженных вариантов метода DrawString:

public void DrawString(string, Font, Brush, PointF);
public void DrawString(string, Font, Brush, RectangleF);
public void DrawString(string, Font, Brush, PointF, StringFormat);
public void DrawString(string, Font, Brush, RectangleF,
StringFormat);
public void DrawString(string, Font, Brush, float, float);
public void DrawString(string, Font, Brush, float, float,
StringFormat);

Параметр типа PointF задает расположение точки вывода текста. В последних двух вариантах метода DrawString расположение этой точки задается при помощи пары чисел формата float.

Если задан параметр типа RectangleF, то текст будет нарисован внутри области, размеры и расположение которой заданы этим параметром. В том случае, если текст выйдет за границы области, то он будет обрезан.

И, наконец, параметр типа StringFormat позволяет выполнить форматирование текста. Описание этой возможности Вы найдете в документации.

Инструменты для рисования

Все методы класса Graphics, предназначенные для рисования фигур или текста, получают через один из параметров перо класса Pen или кисть класса Brush, с помощью которых и выполняется рисование. Метод DrawString, кроме этого, получает еще и шрифт, применяемый для рисования текста.

В этом разделе нашей книги мы познакомимся с перечисленными выше инструментами рисования, применяемые в системе GDI+ и доступными приложениям C# с графическим интерфейсом.

Перья

Перья используются для рисования линий и простейших геометрических фигур и создаются как объекты класса Pen. Вот соответствующие конструкторы:

public Pen(Color);
public Pen(Color, float);
public Pen(Brush);
public Pen(Brush, float);

Первый из этих конструкторов создает перо заданного цвета. Цвет задается при помощи объекта класса Color. Второй конструктор позволяет дополнительно задать толщину пера.

Третий и четвертый конструктор создают перо на основе кисти, причем в четвертом конструкторе можно указать толщину создаваемого пера. О кистях мы расскажем чуть позже в этой главе.

После того как перо создано, программа может определить его атрибуты при помощи свойств класса Pen. Некоторые из этих свойств перечислены в табл. 10-7.

Таблица 10-7. Свойства пера

Свойство Описание
Alignment Выравнивание пера
Width Ширина линии
Brush Кисть, используемая пером
Color Цвет пера
DashStyle Стиль пунктирных и штрих-пунктирных линий
DashCup Вид точек и штрихов пунктирных и штрих-пунктирных линий
DashOffset Расстояние от начала линии до начала штриха
DashPattern Массив шаблонов для создания произвольных штрихов и пробелов штриховых и штрих-пунктирных линий
StartCup EndCup Стиль концов линий
LineCap Формы концов линий
LineJoin Стиль соединения концов двух различных линий
MiterLimit Предельная толщина в области соединения остроконечных линий

Как видите, предусмотрены многочисленные возможности для создания самых разных перьев.

Устанавливая значение свойства Color и Width, приложение может изменить, соответственно, цвет и ширину линии, рисуемой пером.

Если надо нарисовать пунктирную или штрих-пунктирную линию, приложение должно задать необходимое значение для свойства DashStyle. При этом допускается изменять вид точек и тире пунктирных и штрих-пунктирных линий (свойство DashCup), задавать расстояние от начала линии до начала штриха (свойство DashOffset) или даже вовсе задать произвольный вид для штрихов и разделяющих эти штрихи пробелов (свойство DashPattern).

При необходимости изменить внешний вид концов линий используйте свойства StartCup и EndCup, задающие стиль концов линий. Свойство LineCap определяет форму концов линий.

Если вас интересует стык между двумя различными линиями, то стиль этого стыка задается свойством LineJoin, а предельная толщина стыка — стилем MiterLimit.

В приложении PenApp мы покажем способы изменения толщины линии, стиля пунктирной и штрих-пунктирной линии, а также стиля концов линий. Ниже мы привели исходный текст обработчика события Form1_Paint, рисующий линии различных типов и стилей:

using System.Drawing.Drawing2D;

private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics g=e.Graphics;
g.Clear(Color.White);

int x=10;
int y=10;
Pen myPen = new Pen(Color.Black, 1);

g.DrawLine(myPen, x, y, 200, y);

y += 15;
myPen.Width = 2;
g.DrawLine(myPen, x, y, 200, y);

y += 15;
myPen.Width = 3;
g.DrawLine(myPen, x, y, 200, y);

y += 15;
myPen.Width = 5;
g.DrawLine(myPen, x, y, 200, y);

y += 15;
myPen.Width = 10;
g.DrawLine(myPen, x, y, 200, y);

y += 15;
myPen.Width = 3;
myPen.DashStyle = DashStyle.Dash;
g.DrawLine(myPen, x, y, 200, y);

y += 15;
myPen.Width = 3;
myPen.DashStyle = DashStyle.DashDot;
g.DrawLine(myPen, x, y, 200, y);

y += 15;
myPen.Width = 3;
myPen.DashStyle = DashStyle.DashDotDot;
g.DrawLine(myPen, x, y, 200, y);

y += 15;
myPen.Width = 3;
myPen.DashStyle = DashStyle.Dot;
g.DrawLine(myPen, x, y, 200, y);

y += 15;
myPen.Width = 5;
myPen.DashStyle = DashStyle.Solid;
myPen.StartCap = LineCap.ArrowAnchor;
myPen.EndCap = LineCap.DiamondAnchor;
g.DrawLine(myPen, x, y, 200, y);

y += 15;
myPen.Width = 5;
myPen.StartCap = LineCap.Round;
myPen.EndCap = LineCap.RoundAnchor;
g.DrawLine(myPen, x, y, 200, y);

y += 15;
myPen.Width = 5;
myPen.StartCap = LineCap.Square;
myPen.EndCap = LineCap.SquareAnchor;
g.DrawLine(myPen, x, y, 200, y);

y += 15;
myPen.Width = 5;
myPen.StartCap = LineCap.Triangle;
myPen.EndCap = LineCap.Flat;
g.DrawLine(myPen, x, y, 200, y);
}

В начале своей работы метод Form1_Paint получает ссылку на объект класса Graphics, т.е. контекст отображения:

Graphics g=e.Graphics;

Используя полученный контекст отображения, метод Form1_Paint закрашивает окно приложения белым цветом, а затем рисует черную линию толщиной 1 пиксел:

g.Clear(Color.White);

int x=10;
int y=10;
Pen myPen = new Pen(Color.Black, 1);

g.DrawLine(myPen, x, y, 200, y);

Эта техника использовалась нами ранее в приложениях, описанных в этой главе.

А вот дальше начинается новое — мы изменяем свойство Width созданного ранее пера myPen, и снова рисуем линию с небольшим смещением по вертикали:

y += 15;
myPen.Width = 2;
g.DrawLine(myPen, x, y, 200, y);

После этого мы рисуем подобным образом еще несколько линий увеличивающейся толщины.

На следующем этапе наша программа изменяет значение свойства DashStyle, последовательно присваивая ему значения DashStyle.Dash, DashStyle.DashDot, DashStyle.DashDotDot и DashStyle.Dot:

y += 15;
myPen.Width = 3;
myPen.DashStyle = DashStyle.Dash;
g.DrawLine(myPen, x, y, 200, y);

y += 15;
myPen.Width = 3;
myPen.DashStyle = DashStyle.DashDot;
g.DrawLine(myPen, x, y, 200, y);

y += 15;
myPen.Width = 3;
myPen.DashStyle = DashStyle.DashDotDot;
g.DrawLine(myPen, x, y, 200, y);

y += 15;
myPen.Width = 3;
myPen.DashStyle = DashStyle.Dot;
g.DrawLine(myPen, x, y, 200, y);

В результате приложение нарисует в своем окне четыре пунктирные и штрих-пунктирные линии различного типа.

Финальная часть обработчика события Form1_Paint показывает возможность изменения стиля концов линий.

Сначала мы устанавливаем значение свойства DashStyle равным DashStyle.Solid, отменяя рисование пунктирных и штрих-пунктирных линий. Далее мы четыре раза устанавливаем различные свойства StartCap и EndCap, снабжая линии наконечниками различных стилей:

y += 15;
myPen.Width = 5;
myPen.DashStyle = DashStyle.Solid;
myPen.StartCap = LineCap.ArrowAnchor;
myPen.EndCap = LineCap.DiamondAnchor;
g.DrawLine(myPen, x, y, 200, y);

y += 15;
myPen.Width = 5;
myPen.StartCap = LineCap.Round;
myPen.EndCap = LineCap.RoundAnchor;
g.DrawLine(myPen, x, y, 200, y);

y += 15;
myPen.Width = 5;
myPen.StartCap = LineCap.Square;
myPen.EndCap = LineCap.SquareAnchor;
g.DrawLine(myPen, x, y, 200, y);

y += 15;
myPen.Width = 5;
myPen.StartCap = LineCap.Triangle;
myPen.EndCap = LineCap.Flat;
g.DrawLine(myPen, x, y, 200, y);

Результат выполнения этих операций представлен на рис. 10-22.

Рис. 10-22. Рисование линий различными перьями

На рис. 1.3. показаны геометрические фигуры, нарисованные с использованием различных перьев, сплошных и пунктирных.

Разумеется, что с помощью подобных перьев можно рисовать не только прямые линии, но и любые геометрические фигуры.

Кисти

Внутренняя область окна и замкнутых геометрических фигур может быть закрашена при помощи кисти. В приложениях Microsoft.NET Frameworks кисти создаются на базе классов, производных от абстрактного класса Brush. Это следующие классы:

 Brushes

 SolidBrush;

 HatchBrush;

 TextureBrush;

 LinearGradientBrush;

 PathGradientBrush

Кисть для сплошной закраски

Простейшие из кистей — это кисти Brushes и SolidBrush, предназначенные для сплошной закраски фигур. Эти кисти создается при помощи конструктора с одним параметром, задающим цвет в виде объекта класса Color.

В начале этой главы мы рассказывали о приложении PaintApp, в котором кисть класса Brushes применялась для создания кисти, с помощью которой приложение рисовало прямоугольник и эллипс. Кроме этого, кисть черного цвета создавалась и для рисования текста:

private void Form1_Paint(object sender,
System.Windows.Forms.PaintEventArgs e)
{
Graphics g = e.Graphics;

g.Clear(Color.White);
g.DrawString(text, new Font(" Helvetica", 15),
Brushes.Black, 0, 0);
g.DrawRectangle(new Pen(Brushes.Black, 2), 10, 30, 200, 100);
g.DrawEllipse(new Pen(Brushes.Black, 2), 150, 120, 100, 130);
}

Кисти типа HatchBrush

При помощи класса HatchBrush можно создать прямоугольную кисть заданного стиля, с заданным цветом изображения и фона.

Для создания кистей этого типа предусмотрено два конструктора:

public HatchBrush(HatchStyle, Color);
public HatchBrush(HatchStyle, Color, Color);

Первый из этих конструкторов позволяет создать кисть заданного стиля и цвета, а второй дополнительно позволяет указать цвет фона.

В табл. 10-8 мы перечислили различные стили кисти HatchBrush, представляющие собой константы перечисления HatchStyle.

Таблица 10-8. Стили кисти типа HatchBrush

Константа Описание
BackwardDiagonal Линии штриховки располагаются в обратном направлении (от верхнего правого угла к нижнему левому углу кисти)
Cross Пересекающиеся горизонтальные и вертикальные линии
DarkDownwardDiagonal Диагональные линии, идущие в направлении снизу вверх, и расположенные на 50% плотнее, чем при использовании константы ForwardDiagonal (темная штриховка)
DarkHorizontal Горизонтальные линии, которые на 50% плотнее, чем при использовании константы Horizontal (темная штриховка)
DarkUpwardDiagonal Диагональные линии, плотнее на 50% чем при использовании константы BackwardDiagonal (темная штриховка)
DarkVertical Вертикальные линии, которые на 50% плотнее, чем при использовании константы Vertical (темная штриховка)
DashedDownwardDiagonal Штриховые диагональные линии, идущие в обратном направлении
DashedHorizontal Штриховые горизонтальные линии
DashedUpwardDiagonal Штриховые диагональные линии, идущие в прямом направлении
DashedVertical Штриховые вертикальные линии
DiagonalBrick Диагональная «кирпичная» штриховка
DiagonalCross Пересекающиеся прямые и обратные диагональные линии
Divot Штриховка в виде дерна
DottedDiamond Прямые и обратные диагональные пересекающиеся линии, состоящие из отдельных точек
DottedGrid Горизонтальные и вертикальные пересекающиеся линии, состоящие из отдельных точек
ForwardDiagonal Прямые диагональные линии, идущие в направлении от верхнего левого угла к нижнему правому углу кисти
Horizontal Горизонтальные линии
HorizontalBrick Горизонтальные «кирпичные» линии
LargeCheckerBoard Штриховка в виде шахматной доски с крупными клетками
LargeConfetti Штриховка в виде конфетти
LargeGrid Пересекающиеся горизонтальные и вертикальные линии (то же, что и Cross)
LightDownwardDiagonal Светлая обратная диагональная штриховка
LightHorizontal Светлая горизонтальная штриховка
LightUpwardDiagonal Светлая прямая диагональная штриховка
LightVertical Светлая вертикальная штриховка
Max То же, что и SolidDiamond
Min То же, что и Horizonal
NarrowHorizontal Средняя горизонтальная штриховка
NarrowVertical Средняя вертикальная штриховка
OutlinedDiamond Пересекающиеся прямые и обратные диагональные линии штриховки
Percent05 Percent10 Percent20 Percent30 … Percent90 Эти константы задают процентное соотношение цвета штриховки и цвета фона кисти.
Plaid Штриховка в виде пледа
Shingle Кровельная штриховка
SmallCheckerBoard Штриховка в виде шахматной доски с мелкими клетками
SmallConfetti Штриховка в виде мелкого конфетти
SmallGrid Штриховка в виде мелкой сетки
SolidDiamond Штриховка в виде шахматной доски, расположенная по диагонали
Sphere Штриховка с использованием сферических фигур
Trellis Штриховка в виде решетки
Vertical Вертикальные линии
Wave Волнообразные линии
Weave Штриховка в виде ткани
WideDownwardDiagonal Широкие обратные диагональные линии
WideUpwardDiagonal Широкие прямые диагональные линии
ZigZag Зигзагообразные горизонтальные линии

Для того чтобы продемонстрировать использование кистей класса HatchBrush, мы подготовили приложение HatchBrushApp.

Вот исходный текст обработчика событий Form1_Paint этого приложения, в котором выполняются существенные для нас операции:

using System.Drawing.Drawing2D;

private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics g=e.Graphics;
g.Clear(Color.White);

HatchBrush hb = new HatchBrush(HatchStyle.Cross, Color.Black,
Color.White);

g.FillRectangle(hb, 10, 30, 200, 100);
g.DrawRectangle(new Pen(Brushes.Black, 1), 10, 30, 200, 100);

HatchBrush hb1 = new HatchBrush(HatchStyle.DottedGrid,
Color.Black, Color.White);
g.FillEllipse(hb1, 150, 120, 100, 130);
g.DrawEllipse(new Pen(Brushes.Black, 1), 150, 120, 100, 130);

HatchBrush hb2 = new HatchBrush(HatchStyle.Divot, Color.Black,
Color.White);
g.FillEllipse(hb2, 60, 160, 60, 60);
g.DrawEllipse(new Pen(Brushes.Black, 1), 60, 160, 60, 60);
}

Как видите, мы здесь последовательно создаем три различных кисти, а затем используем их для закраски внутренних областей прямоугольника и эллипсов.

Результат работы приложения HatchBrushApp показан на рис. 10-23.

Рис. 10-23. Использование кистей класса HatchBrush

Кисти типа TextureBrush

Если Вас не устраивает ни одна из кистей, перечисленных в табл. 10-8, то Вы можете создать собственную кисть на базе класса TextureBrush, в виде произвольного изображения. Такая кисть, называемая текстурной, может иметь любой внешний вид и любой цвет.

Для создания кисти класса TextureBrush Ваше приложение может воспользоваться одним из следующих конструкторов:

public TextureBrush(Image);
public TextureBrush(Image, Rectangle);
public TextureBrush(Image, RectangleF);
public TextureBrush(Image, WrapMode);
public TextureBrush(Image, Rectangle, ImageAttributes);
public TextureBrush(Image, WrapMode, Rectangle);
public TextureBrush(Image, WrapMode, RectangleF);

Самому простому из этих конструкторов нужно передать изображение, загруженное из ресурсов приложения или из внешнего файла (с помощью рассмотренного ранее метода Image.FromFile).

Структуры Rectangle и RectangleF позволяют задать границы прямоугольной области, ограничивающие изображение кисти.

С помощью констант перечисления WrapMode программа может задать способ размещения текстуры по горизонтали и вертикали. Эти константы приведены в табл. 10-9.

Таблица 10-9. Константы перечисления WrapMode

Константа Описание
Clamp Текстура кисти «прикрепляется» к границе объекта
Tile При закраске текстура кисти повторяется по вертикали и горизонтали
TileFlipX Аналогично предыдущему, но изображения в соседних столбцах заменяется зеркальным, отражаясь по вертикали
TileFlipY Аналогично предыдущему, но отражение происходит по горизонтали
TileFlipXY Отражение и по вертикали, и по горизонтали.

И, наконец, параметр ImageAttributes позволяет задать различные атрибуты изображения, такие как количество цветов и способ рисования. Описание этого параметра и класса ImageAttributes Вы найдете в электронной справочной документации системы Microsoft Visual Studio.NET.

Закраску с помощью текстурной кисти мы демонстрируем в приложении TextureBrushApp. Ниже мы привели исходный текст обработчика события Form1_Paint этого приложения, в котором происходит все самое интересное:

private void Form1_Paint(object sender,
System.Windows.Forms.PaintEventArgs e)
{
Graphics g=e.Graphics;
g.Clear(Color.White);

Image myBrushImage = new Bitmap(GetType(), " L_RED.GIF");
TextureBrush tb = new TextureBrush(myBrushImage);

g.FillRectangle(tb, 10, 30, 200, 100);
g.DrawRectangle(new Pen(Brushes.Black, 1), 10, 30, 200, 100);
}

После получения контекста отображения и очистки поверхности окна мы создаем новое изображение класса Image, загружая его из ресурсов приложения:

Image myBrushImage = new Bitmap(GetType(), " L_RED.GIF");

Обратите внимание, что мы создаем объект класса Bitmap, а полученную в результате ссылку присваиваем объекту класса Image. Предполагается, что перед трансляцией приложения Вы скопировали файл текстуры L_RED.GIF в ресурсы приложения, а также установили значение свойства Build Action для файла изображения равным Embedded Resource.

Результат закраски прямоугольной области текстурной кистью показан на рис. 10-24.

Рис. 10-24. Закрашивание прямоугольника кистью типа TextureBrush

Градиентные кисти

Приложениям GDI+ доступен еще один вид кистей — так называемая градиентная кисть. Линейная градиентная кисть LinearGradientBrush позволяет задать в кисти переход от одного цвета к другому. Кисти с множественным градиентом PathGradientBrush позволяют задать внутри кисти область, которая будет закрашена с использованием цветового градиента.

В нашей книге из-за недостатка места мы рассмотрим только один вариант использования линейной градиентной кисти.

Рассмотрим обработчик события Form1_Paint приложения LinearGradientApp, специально созданного нами для демонстрации возможностей закрашивания при помощи линейной градиентной кисти:

private void Form1_Paint(object sender,
System.Windows.Forms.PaintEventArgs e)
{
Graphics g=e.Graphics;
g.Clear(Color.White);

Rectangle rect = new Rectangle(10, 10, 50, 50);

LinearGradientBrush gb = new LinearGradientBrush(rect,
Color.White, Color.Black, LinearGradientMode.BackwardDiagonal);

g.FillRectangle(gb, 10, 30, 200, 100);
g.DrawRectangle(new Pen(Brushes.Black, 1), 10, 30, 200, 100);
}

Прямоугольная область задает пространство, в котором происходит изменение цвета. Конструктору класса LinearGradientBrush передаются координаты этой области, значения двух цветов, а также режим градиентного закрашивания LinearGradientMode.

Возможные значения перечисления LinearGradientMode мы привели в табл. 10-10.

Таблица 10-10. Константы перечисления LinearGradientMode

Константа Направление изменения цвета
Horizontal Слева направо
Vertical Сверху вниз
ForwardDiagonal По диагонали из верхнего левого угла в нижний правый угол
BackwardDiagonal По диагонали из верхнего правого угла в нижний левый угол

На рис. 10-25 мы показали пример градиентного закрашивания внутренней области прямоугольника в приложении LinearGradientApp.

Рис. 10-25. Закрашивание прямоугольника линейной градиентной кистью типа LinearGradientBrush

Шрифты

Для того чтобы рисовать текст, используются шрифты. ОС Microsoft Windows может работать с растровыми, векторными и масштабируемыми шрифтами. Кроме этого, приложения Microsoft Windows могут использовать шрифты, встроенные в устройство вывода (обычно это принтерные шрифты).

Классификация шрифтов

Растровые шрифты содержат образы всех символов в виде растровых изображений. При этом для каждого размера шрифта необходимо иметь свой набор символов. Кроме того, различные устройства вывода имеют разное соотношение горизонтальных и вертикальных размеров пиксела, что приводит к необходимости хранить отдельные наборы образов символов не только для разных размеров шрифта, но и для разного соотношения размеров пиксела физического устройства отображения.

Растровые шрифты плохо поддаются масштабированию, так как при этом наклонные линии контура символа принимают зазубренный вид.

Векторные шрифты хранятся в виде набора векторов, описывающих отдельные сегменты и линии контура символа, поэтому они легко масштабируются. Однако их внешний вид далек от идеального. Как правило, векторные шрифты используются для вывода текста на векторные устройства, такие, как плоттер.

В состав ОС Microsoft Windows входит не очень большое количество шрифтов, однако при необходимости Вы можете приобрести дополнительные шрифты как отдельно, так и в составе различного программного обеспечения. Например, вместе с графическим редактором Corel Draw поставляются сотни различных шрифтов.

Помимо обычных шрифтов существуют символьные или декоративные шрифты, содержащие вместо букв различные значки.

Шрифты TrueType

Масштабируемые шрифты TrueType впервые появились в Microsoft Windows версии 3.1 и сильно повлияли на рост популярности этой ОС. Шрифты TrueType поддаются масштабированию без существенных искажений внешнего вида.

Рис. 10-26 иллюстрирует ухудшение внешнего вида растрового и векторного шрифтов при увеличенном размере символов. Внешний вид масштабируемого шрифта не ухудшился.

Масштабируемые шрифты TrueType не только сохраняют свое начертание при произвольном изменении высоты букв, но и обладают другими достоинствами.

Отметим, например, возможность вывода строк текста, расположенных под любым углом относительно горизонтальной оси. Растровые и векторные шрифты позволяют располагать строки текста только в горизонтальном направлении, что может создать определенные трудности, например, при необходимости надписать название улицы на карте города.

Еще одно преимущество масштабируемых шрифтов TrueType связано с тем, что Вы можете встроить такой шрифт непосредственно в документ.

Зачем это может понадобиться?

Дело в том, что стандартный набор шрифтов TrueType, поставляемых в составе ОС Microsoft Windows, не всегда удовлетворяет пользователей. Поэтому они приобретают дополнительные шрифты у независимых разработчиков. Однако использование нестандартных шрифтов может привести к проблемам при необходимости переноса документа из одного компьютера в другие, так как там нужного шрифта может не оказаться. Вы, конечно, можете просто скопировать нужный шрифт и перенести его вместе с документом, однако такая процедура может быть запрещена по условию лицензионного соглашения с разработчиками шрифта.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.