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


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

Обновлен: Ноябрь 2007

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

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

Пример

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

На следующем рисунке показан результат выполнения следующего кода.

Непрозрачный и частично прозрачный

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)

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);

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

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

См. также

Задачи

Практическое руководство. Установка степени прозрачности фона элемента управления

Практическое руководство. Создание прозрачных форм Windows Forms

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

Другие ресурсы

Альфа-смешение цвета для линий и заливок