Использование режима комбинирования для управления альфа-смешением
Иногда может потребоваться создать вне экрана точечное изображение, обладающее следующими характеристиками.
Альфа-компоненты цветов меньше 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; |
На следующем рисунке показан результат выполнения измененного кода.
--------
- Объекты 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
- Параметры качества
- Преобразования
- Область обрезки
- Использование вложенных графических контейнеров
- Преобразования во вложенных контейнерах
- Обрезка во вложенных контейнерах
- Параметры качества во вложенных контейнерах
- Различные уровни вложенных контейнеров
- Использование областей
- Проверка нахождения указателя мыши в заданной области
- Компиляция кода
- Обрезка изображения по границам области обрезки
- Компиляция кода
- Получение списка установленных кодировщиков
- Компиляция кода
- Получение списка установленных декодеров
- Компиляция кода
- Компиляция кода