Различные уровни вложенных контейнеров
Нет ограничения на использование в объекте Graphics только одного контейнера. Можно создать последовательность контейнеров, вложенных друг в друга, и указать объемное преобразование, область обрезки и параметры качества для каждого из этих вложенных контейнеров. Если вызывается какой-либо метод рисования из контейнера наибольшего уровня вложенности, преобразования применяются по порядку, начиная с этого контейнера и оканчивая контейнером наименьшего уровня вложенности. Объекты, отображаемые из контейнера наибольшей степени вложенности, обрезаются по области, являющейся пересечением всех областей обрезки.
В следующем примере создается объект Graphics, для которого устанавливается режим сглаживания текста AntiAlias. В коде создаются два контейнера, один из них вложен в другой. Для режим сглаживания внешнего контейнера устанавливается значение SingleBitPerPixel, а для режима сглаживания внутреннего контейнера — AntiAlias. Код выводит на экран три строки: одну из внутреннего контейнера, одну из внешнего контейнера и одну из самого объекта Graphics.
Graphics graphics = e.Graphics; GraphicsContainer innerContainer; GraphicsContainer outerContainer; SolidBrush brush = new SolidBrush(Color.Blue); FontFamily fontFamily = new FontFamily("Times New Roman"); Font font = new Font(fontFamily, 36, FontStyle.Regular, GraphicsUnit.Pixel); graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; outerContainer = graphics.BeginContainer(); graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixel; innerContainer = graphics.BeginContainer(); graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; graphics.DrawString( "Inner Container", font, brush, new PointF(20, 10)); graphics.EndContainer(innerContainer);
graphics.DrawString( "Outer Container", font, brush, new PointF(20, 50)); graphics.EndContainer(outerContainer); graphics.DrawString( "Graphics Object", font, brush, new PointF(20, 90)); |
The following illustration shows the three strings. The strings drawn from the inner container and from the Graphics object are smoothed by antialiasing. The string drawn from the outer container is not smoothed by antialiasing because the TextRenderingHint property is set to SingleBitPerPixel.
--------------
Три нарисованные строки показаны на следующем рисунке. Строки, выводимые из внутреннего контейнера и из объекта Graphics, размываются с помощью сглаживания. Строка, выводимая из внешнего контейнера, не подвергается сглаживанию, потому что свойство TextRenderingHint в этом случае имеет значение SingleBitPerPixel.
Using Regions
The GDI+ Region class allows you to define a custom shape. The shape can be made up of lines, polygons, and curves.
Two common uses for regions are hit testing and clipping. Hit testing is determining whether the mouse was clicked in a certain region of the screen. Clipping is restricting drawing to a certain region.
How to: Use Hit Testing with a Region
The purpose of hit testing is to determine whether the cursor is over a given object, such as an icon or a button.
Example
The following example creates a plus-shaped region by forming the union of two rectangular regions. Assume that the variable point
holds the location of the most recent click. The code checks to see whether point
is in the plus-shaped region. If the point is in the region (a hit), the region is filled with an opaque red brush. Otherwise, the region is filled with a semitransparent red brush.
Point point = new Point(60, 10); // Assume that the variable "point" contains the location of the // most recent mouse click. // To simulate a hit, assign (60, 10) to point. // To simulate a miss, assign (0, 0) to point. SolidBrush solidBrush = new SolidBrush(Color.Black); Region region1 = new Region(new Rectangle(50, 0, 50, 150)); Region region2 = new Region(new Rectangle(0, 50, 150, 50)); // Create a plus-shaped region by forming the union of region1 and // region2. // The union replaces region1. region1.Union(region2); if (region1.IsVisible(point, e.Graphics)) { // The point is in the region. Use an opaque brush. solidBrush.Color = Color.FromArgb(255, 255, 0, 0); } else { // The point is not in the region. Use a semitransparent brush. solidBrush.Color = Color.FromArgb(64, 255, 0, 0); } e.Graphics.FillRegion(solidBrush, region1); |
Compiling the Code
The preceding example is designed for use with Windows Forms, and it requires PaintEventArgs e, which is a parameter of PaintEventHandler.
- Объекты Graphics и Drawing в Windows Forms
- Обзор графических возможностей
- Интерфейс управляемых классов
- Три категории графических служб
- Двухмерная векторная графика
- Рисунки
- Типографская разметка
- Структура интерфейса Graphics
- Важные классы
- Прямые и кривые линии и фигуры
- Общие сведения о векторной графике
- Методы рисования с помощью графических объектов
- Рисование линии
- Создание объекта Pen
- Штриховые линии и завершения отрезков
- Рисование прямоугольника
- Рисование эллипса
- Рисование дуги
- Рисование многоугольника
- Физические и математические сплайны
- Рисование сплайнов Безье
- Применение контуров
- Сплошные кисти
- Штриховые кисти
- Текстурные кисти
- Градиентные кисти
- Управляемый интерфейс для кривых
- Использование областей
- Задание области обрезки
- Сглаживание прямых и кривых линий
- Неровности
- Сглаживание
- Работа с растровыми и векторными изображениями с использованием классов Image, Bitmap и Metafile
- Типы точечных рисунков
- Форматы графических файлов
- Форматы метафайлов
- Типы файлов и клонирование
- Варианты DrawImage
- Системы координат и преобразования
- Типы систем координат
- Преобразования и системы координат
- Матричное представление преобразований
- Составные преобразования
- Глобальные и локальные преобразования
- Глобальные преобразования
- Локальные преобразования
- Использование управляемых графических классов Приступая к программированию графики
- Создание объектов Graphics для рисования
- Создание объекта Graphics
- PaintEventArgs в обработчике события Paint
- Получение ссылки на объект Graphics из объекта PaintEventArgs в событии Paint
- Рисование фигур и изображений и управление ими
- Создание фигурной формы Windows Forms
- Компиляция кода
- Копирование пикселов для уменьшения эффекта дрожания изображения в Windows Forms
- Компиляция кода
- Рисование линий и фигур с помощью пера
- Рисование линий с помощью пера
- Компиляция кода
- Рисование прямоугольников с помощью пера
- Компиляция кода
- Задание толщины и выравнивания пера
- Изменение толщины пера
- Изменение выравнивания пера
- Создание вложенного пера
- Рисование линий с наконечниками
- Компиляция кода
- Соединение линий
- Компиляция кода
- Рисование пользовательских пунктирных линий
- Компиляция кода
- Рисование линии с текстурным заполнением
- Компиляция кода
- Использование кисти для заливки фигур
- Заливка фигуры сплошным цветом
- Компиляция кода
- Штриховая заливка фигуры
- Компиляция кода
- Заливка фигуры текстурой, созданной на основе изображения
- Компиляция кода
- Мозаичное заполнение фигуры заданным изображением
- Мозаичное заполнение изображением
- Горизонтальное зеркальное преобразование изображения при мозаичном заполнении
- Вертикальное зеркальное преобразование изображения при мозаичном заполнении
- Мозаичное заполнение с зеркальным отображением изображения по горизонтали и вертикали
- Заливка фигур с помощью градиентной кисти
- Создание линейного градиента
- Использование горизонтальных линейных градиентов
- Настройка линейных градиентов
- Создание диагональных линейных градиентов
- Создание градиента вдоль контура
- Заливка эллипса с использованием градиента контура
- Указание точек на границе
- Настройка градиента контура
- Настройка с интерполяцией
- Задание центральной точки
- Применение гамма-коррекции к градиенту
- Компиляция кода
- Загрузка и отображение метафайлов
- Компиляция кода
- Обрезка и масштабирование изображений
- Компиляция кода
- Поворот, отражение и наклон изображений
- Компиляция кода
- Использование режима интерполяции для управления качеством изображений при масштабировании
- Компиляция кода
- Создание эскизов изображений
- Компиляция кода
- Повышение производительности за счет отключения автоматического масштабирования
- Компиляция кода
- Чтение метаданных изображения
- Значение
- Пример Описание
- Компиляция кода
- Создание растрового изображения во время выполнения
- Компиляция кода
- Извлечение связанного с файлом значка в Windows Forms
- Компиляция кода
- Альфа-смешение цвета для линий и заливок
- Рисование непрозрачных и полупрозрачных линий
- Компиляция кода
- Рисование непрозрачными и полупрозрачными кистями
- Компиляция кода
- Использование режима комбинирования для управления альфа-смешением
- Компиляция кода
- Использование матрицы цветов для задания значений прозрачности в изображениях
- Компиляция кода
- Шрифты и текст
- Разработка шрифтов и их семейств
- Компиляция кода
- Рисование текста в указанной позиции
- Рисование строки текста с использованием gdi
- Компиляция кода
- Многострочный вывод текста в прямоугольнике
- Рисование текста с переносом по словам в прямоугольнике с помощью gdi
- Компиляция кода
- Рисование текста с использованием gdi
- Компиляция кода
- Выравнивание рисуемого текста
- Рисование центрированного текста с использованием gdi (DrawText)
- Компиляция кода
- Вывод текста по вертикали
- Компиляция кода
- Установка позиций табуляции для выводимого текста
- Компиляция кода
- Перебор установленных шрифтов
- Компиляция кода
- Получение метрик шрифтов
- Компиляция кода
- Сглаживание текста
- Компиляция кода
- Построение и рисование кривых
- Рисование фундаментальных сплайнов
- Рисование фундаментального сплайна в форме колокола
- Рисование замкнутого фундаментального сплайна
- Изменение изгиба фундаментального сплайна
- Компиляция кода
- Рисование отдельного сплайна Безье
- Компиляция кода
- Рисование последовательности сплайнов Безье
- Компиляция кода
- Построение и рисование контуров
- Создание изображений из прямых и кривых линий и геометрических фигур
- Компиляция кода
- Заливка открытых фигур
- Компиляция кода
- Спрямление участков кривой
- Спрямление контура
- Использование объемного преобразования
- Различные типы преобразований
- Значение порядка преобразований
- Примеры составных преобразований
- Использование графических контейнеров
- Управление состоянием объекта Graphics
- Состояние объекта Graphics
- Параметры качества
- Преобразования
- Область обрезки
- Использование вложенных графических контейнеров
- Преобразования во вложенных контейнерах
- Обрезка во вложенных контейнерах
- Параметры качества во вложенных контейнерах
- Различные уровни вложенных контейнеров
- Использование областей
- Проверка нахождения указателя мыши в заданной области
- Компиляция кода
- Обрезка изображения по границам области обрезки
- Компиляция кода
- Получение списка установленных кодировщиков
- Компиляция кода
- Получение списка установленных декодеров
- Компиляция кода
- Компиляция кода