
- •Объекты 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
- •Параметры качества
- •Преобразования
- •Область обрезки
- •Использование вложенных графических контейнеров
- •Преобразования во вложенных контейнерах
- •Обрезка во вложенных контейнерах
- •Параметры качества во вложенных контейнерах
- •Различные уровни вложенных контейнеров
- •Использование областей
- •Проверка нахождения указателя мыши в заданной области
- •Компиляция кода
- •Обрезка изображения по границам области обрезки
- •Компиляция кода
- •Получение списка установленных кодировщиков
- •Компиляция кода
- •Получение списка установленных декодеров
- •Компиляция кода
- •Компиляция кода
Компиляция кода
Предыдущий пример предназначен для работы с Windows Forms, для него необходим объект PaintEventArgs e, передаваемый в качестве параметра обработчику событий PaintEventHandler.
How to: Use Compositing Mode to Control Alpha Blending
There may be times when you want to create an off-screen bitmap that has the following characteristics:
Colors have alpha values that are less than 255.
Colors are not alpha blended with each other as you create the bitmap.
When you display the finished bitmap, colors in the bitmap are alpha blended with the background colors on the display device.
To create such a bitmap, construct a blank Bitmap object, and then construct a Graphics object based on that bitmap. Set the compositing mode of the Graphics object to CompositingMode..::.SourceCopy.
Example
The following example creates a Graphics object based on a Bitmap object. The code uses the Graphics object along with two semitransparent brushes (alpha = 160) to paint on the bitmap. The code fills a red ellipse and a green ellipse using the semitransparent brushes. The green ellipse overlaps the red ellipse, but the green is not blended with the red because the compositing mode of the Graphics object is set to SourceCopy.
The code draws the bitmap on the screen twice: once on a white background and once on a multicolored background. The pixels in the bitmap that are part of the two ellipses have an alpha component of 160, so the ellipses are blended with the background colors on the screen.
The following illustration shows the output of the code example. Note that the ellipses are blended with the background, but they are not blended with each other.
The code example contains this statement:
bitmapGraphics.CompositingMode = CompositingMode.SourceCopy; |
Использование режима комбинирования для управления альфа-смешением
Иногда может потребоваться создать вне экрана точечное изображение, обладающее следующими характеристиками.
Альфа-компоненты цветов меньше 255.
При создании растрового изображения не выполняется альфа-смешение цветов друг с другом.
При выводе окончательно сформированного растрового изображения на устройстве отображения выполняется альфа-смешение цветов точечного изображения с цветами фона.
Для формирования такого растрового изображения следует создать пустой объект Bitmap, а затем построить на его основе объект Graphics. Присвойте режиму комбинирования объекта Graphics значение CompositingMode..::.SourceCopy.
Пример
В приведенном ниже примере создается объект Graphics на основе объекта Bitmap. Объект Graphics используется в коде вместе с двумя полупрозрачными кистями (альфа-компонент равен 160) для рисования на фоне растрового изображения. В примере осуществляется заливка красного и зеленого эллипсов с помощью полупрозрачных кистей. Зеленый эллипс частично перекрывается с красным эллипсом, но зеленый и красный цвета не смешиваются, потому что режим комбинирования, принадлежащий объекту Graphics, установлен равным SourceCopy.
Растровое изображение рисуется на экране дважды: один раз на белом фоне, а другой раз на многоцветном фоне. Точки растрового изображения, являющиеся частями двух ранее нарисованных эллипсов, имеют альфа-компонент, равный 160, поэтому цвета эллипсов смешиваются с фоновыми цветами на экране.
На следующем рисунке показан результат выполнения примера кода. Обратите внимание, что цвета эллипсов смешиваются с фоном, но не смешиваются друг с другом.
------
Пример кода содержит следующую инструкцию:
bitmapGraphics.CompositingMode = CompositingMode.SourceCopy |
If you want the ellipses to be blended with each other as well as with the background, change that statement to the following:
bitmapGraphics.CompositingMode = CompositingMode.SourceOver; |
The following illustration shows the output of the revised code.
// Create a blank bitmap. Bitmap myBitmap = new Bitmap(180, 100); // Create a Graphics object that we can use to draw on the bitmap. Graphics bitmapGraphics = Graphics.FromImage(myBitmap); // Create a red brush and a green brush, each with an alpha value of 160. SolidBrush redBrush = new SolidBrush(Color.FromArgb(160, 255, 0, 0)); SolidBrush greenBrush = new SolidBrush(Color.FromArgb(160, 0, 255, 0)); // Set the compositing mode so that when we draw overlapping ellipses, // the colors of the ellipses are not blended. bitmapGraphics.CompositingMode = CompositingMode.SourceCopy; // Fill an ellipse using a red brush that has an alpha value of 160. bitmapGraphics.FillEllipse(redBrush, 0, 0, 150, 70); // Fill a second ellipse using a green brush that has an alpha value of 160. // The green ellipse overlaps the red ellipse, but the green is not // blended with the red. bitmapGraphics.FillEllipse(greenBrush, 30, 30, 150, 70); // Set the compositing quality of the form's Graphics object. e.Graphics.CompositingQuality = CompositingQuality.GammaCorrected; // Draw a multicolored background. SolidBrush colorBrush = new SolidBrush(Color.Aqua); e.Graphics.FillRectangle(colorBrush, 200, 0, 60, 100); colorBrush.Color = Color.Yellow; e.Graphics.FillRectangle(colorBrush, 260, 0, 60, 100); colorBrush.Color = Color.Fuchsia; e.Graphics.FillRectangle(colorBrush, 320, 0, 60, 100); // Display the bitmap on a white background. e.Graphics.DrawImage(myBitmap, 0, 0); // Display the bitmap on a multicolored background. e.Graphics.DrawImage(myBitmap, 200, 0); |
Compiling the Code
The preceding example is designed for use with Windows Forms, and it requires PaintEventArgse, which is a parameter of PaintEventHandler.
Если требуется, чтобы цвета эллипсов смешивались друг с другом так же, как и с фоном, замените эту инструкцию на приведенную ниже.
bitmapGraphics.CompositingMode = CompositingMode.SourceOver; |
На следующем рисунке показан результат выполнения измененного кода.
--------