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


Практическое руководство. Рисование непрозрачных и полутранспарентных линий

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

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

Пример

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

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

Pen opaquePen = new Pen(Color.FromArgb(255, 0, 0, 255), 15);
Pen semiTransPen = new Pen(Color.FromArgb(128, 0, 0, 255), 15);

e.Graphics.DrawLine(opaquePen, 0, 20, 100, 20);
e.Graphics.DrawLine(semiTransPen, 0, 40, 100, 40);

e.Graphics.CompositingQuality = CompositingQuality.GammaCorrected;
e.Graphics.DrawLine(semiTransPen, 0, 60, 100, 60);
Dim bitmap As New Bitmap("Texture1.jpg")
e.Graphics.DrawImage(bitmap, 10, 5, bitmap.Width, bitmap.Height)

Dim opaquePen As New Pen(Color.FromArgb(255, 0, 0, 255), 15)
Dim semiTransPen As New Pen(Color.FromArgb(128, 0, 0, 255), 15)

e.Graphics.DrawLine(opaquePen, 0, 20, 100, 20)
e.Graphics.DrawLine(semiTransPen, 0, 40, 100, 40)

e.Graphics.CompositingQuality = CompositingQuality.GammaCorrected
e.Graphics.DrawLine(semiTransPen, 0, 60, 100, 60)

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

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

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

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

См. также