Практическое руководство. Использование матрицы цветов для задания значений прозрачности в изображениях
Bitmap Класс (который наследуется от Image класс) и ImageAttributes предоставляют функциональные возможности для получения и установки значения в пикселях. Можно использовать ImageAttributes значений для изменения альфа-канал для всего изображения, или можно вызвать SetPixel метод Bitmap класса для изменения значений отдельных пикселей.
Пример
ImageAttributes Класс имеет множество свойств, которые можно использовать для изменения образов во время отрисовки. В следующем примере ImageAttributes объект используется для задания альфа-значения до 80 процентов от они были. Это делается путем инициализации матрицы цветов и альфа-канал, значение в матрице 0,8 масштабирования. Передается адрес цветовой матрице SetColorMatrix метод ImageAttributes объекта и ImageAttributes объект передается DrawString метод Graphics объекта.
Во время отрисовки, до 80 процентов от их первоначальных преобразуются альфа-значения в точечном рисунке. Результатом в образ, который смешивается с фоном. Как показано на следующем рисунке, растровое изображение выглядит прозрачным; Появится сплошная черная линия через него.
Когда изображение на белой части в фоновом режиме, оно смешивается с белым цветом. Пересечения черная линия, изображение изображения смешивается с черным цветом.
// Create the Bitmap object and load it with the texture image.
Bitmap bitmap = new Bitmap("Texture.jpg");
// Initialize the color matrix.
// Note the value 0.8 in row 4, column 4.
float[][] matrixItems ={
new float[] {1, 0, 0, 0, 0},
new float[] {0, 1, 0, 0, 0},
new float[] {0, 0, 1, 0, 0},
new float[] {0, 0, 0, 0.8f, 0},
new float[] {0, 0, 0, 0, 1}};
ColorMatrix colorMatrix = new ColorMatrix(matrixItems);
// Create an ImageAttributes object and set its color matrix.
ImageAttributes imageAtt = new ImageAttributes();
imageAtt.SetColorMatrix(
colorMatrix,
ColorMatrixFlag.Default,
ColorAdjustType.Bitmap);
// First draw a wide black line.
e.Graphics.DrawLine(
new Pen(Color.Black, 25),
new Point(10, 35),
new Point(200, 35));
// Now draw the semitransparent bitmap image.
int iWidth = bitmap.Width;
int iHeight = bitmap.Height;
e.Graphics.DrawImage(
bitmap,
new Rectangle(30, 0, iWidth, iHeight), // destination rectangle
0.0f, // source rectangle x
0.0f, // source rectangle y
iWidth, // source rectangle width
iHeight, // source rectangle height
GraphicsUnit.Pixel,
imageAtt);
Компиляция кода
Предыдущий пример предназначен для работы с Windows Forms и требует PaintEventArgse
, который является параметром PaintEventHandler.