Поделиться через


Как рисовать с непрозрачными и полупрозрачными кистями

При заливке формы необходимо передать объект Brush одному из методов заливки класса Graphics. Единственным параметром конструктора SolidBrush является объект Color. Чтобы заполнить непрозрачную фигуру, задайте альфа-компонент цвета равным 255. Чтобы заполнить полутранспарентную фигуру, задайте альфа-компоненту любое значение от 1 до 254.

При заполнении полутранспарентной фигуры цвет фигуры смешивается с цветами фона. Альфа-компонент определяет степень смешивания цветов фигуры и фона. При значениях альфа, близких к 0, цвет фона имеет больший приоритет, при значениях альфа, близких к 255, больший приоритет имеет цвет фигуры.

Пример

В следующем примере рисуется растровое изображение, а затем осуществляется заливка трех эллипсов, перекрывающих растровое изображение. Первый многоточие использует альфа-компонент 255, поэтому он непрозрачный. Второй и третий многоточие используют альфа-компонент 128, поэтому они полутранспарентны; Фоновое изображение можно увидеть через многоточие. Вызов, который устанавливает свойство CompositingQuality, вынуждает выполнить наложение для третьего эллипса совместно с гамма-коррекцией.

Bitmap bitmap = new Bitmap("Texture1.jpg");
e.Graphics.DrawImage(bitmap, 50, 50, bitmap.Width, bitmap.Height);

SolidBrush opaqueBrush = new SolidBrush(Color.FromArgb(255, 0, 0, 255));
SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(128, 0, 0, 255));

e.Graphics.FillEllipse(opaqueBrush, 35, 45, 45, 30);
e.Graphics.FillEllipse(semiTransBrush, 86, 45, 45, 30);

e.Graphics.CompositingQuality = CompositingQuality.GammaCorrected;
e.Graphics.FillEllipse(semiTransBrush, 40, 90, 86, 30);
Dim bitmap As New Bitmap("Texture1.jpg")
e.Graphics.DrawImage(bitmap, 50, 50, bitmap.Width, bitmap.Height)

Dim opaqueBrush As New SolidBrush(Color.FromArgb(255, 0, 0, 255))
Dim semiTransBrush As New SolidBrush(Color.FromArgb(128, 0, 0, 255))

e.Graphics.FillEllipse(opaqueBrush, 35, 45, 45, 30)
e.Graphics.FillEllipse(semiTransBrush, 86, 45, 45, 30)

e.Graphics.CompositingQuality = CompositingQuality.GammaCorrected
e.Graphics.FillEllipse(semiTransBrush, 40, 90, 86, 30)

На рисунке ниже показан результат выполнения кода:

Иллюстрация, показывающая непрозрачные и полупрозрачные выходные данные.

Компиляция кода

Приведенный выше пример предназначен для использования с Windows Forms и требуется PaintEventArgse, который является параметром PaintEventHandler.

См. также