Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Классы 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);
' Create the Bitmap object and load it with the texture image.
Dim bitmap As New Bitmap("Texture.jpg")
' Initialize the color matrix.
' Note the value 0.8 in row 4, column 4.
Dim matrixItems As Single()() = { _
New Single() {1, 0, 0, 0, 0}, _
New Single() {0, 1, 0, 0, 0}, _
New Single() {0, 0, 1, 0, 0}, _
New Single() {0, 0, 0, 0.8F, 0}, _
New Single() {0, 0, 0, 0, 1}}
Dim colorMatrix As New ColorMatrix(matrixItems)
' Create an ImageAttributes object and set its color matrix.
Dim imageAtt As 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.
Dim iWidth As Integer = bitmap.Width
Dim iHeight As Integer = bitmap.Height
' Pass in the destination rectangle (2nd argument) and the x _
' coordinate (3rd argument), x coordinate (4th argument), width _
' (5th argument), and height (6th argument) of the source rectangle.
e.Graphics.DrawImage( _
bitmap, _
New Rectangle(30, 0, iWidth, iHeight), _
0.0F, _
0.0F, _
iWidth, _
iHeight, _
GraphicsUnit.Pixel, _
imageAtt)
Компиляция кода
Приведенный выше пример предназначен для использования с Windows Forms и требуется PaintEventArgse
, который является параметром PaintEventHandler.
См. также
.NET Desktop feedback