Udostępnij za pośrednictwem


Porady: stosowanie macierzy kolorów ustawiania wartości alfa na obrazach

Klasa Bitmap (dziedziczona po Image klasie) i ImageAttributes klasa zapewniają funkcjonalność pobierania i ustawiania wartości pikseli. Możesz użyć ImageAttributes klasy , aby zmodyfikować wartości alfa dla całego obrazu lub wywołać SetPixel metodę Bitmap klasy, aby zmodyfikować poszczególne wartości pikseli.

Przykład

Klasa ImageAttributes ma wiele właściwości, których można użyć do modyfikowania obrazów podczas renderowania. W poniższym przykładzie ImageAttributes obiekt służy do ustawiania wszystkich wartości alfa na 80 procent tego, co były. Jest to realizowane przez zainicjowanie macierzy kolorów i ustawienie wartości skalowania alfa w macierzy na wartość 0,8. Adres macierzy kolorów jest przekazywany do SetColorMatrix metody ImageAttributes obiektu, a ImageAttributes obiekt jest przekazywany do DrawString metody Graphics obiektu.

Podczas renderowania wartości alfa w mapie bitowej są konwertowane na 80% wartości, które były. Powoduje to połączenie obrazu z tłem. Jak pokazano na poniższej ilustracji, obraz mapy bitowej wygląda przezroczystie; widać przez nią solidną czarną linię.

Screenshot of alpha blending using a matrix.

Gdy obraz znajduje się na białej części tła, obraz został w połączeniu z kolorem białym. Gdzie obraz przecina czarną linię, obraz jest w połączeniu z kolorem czarnym.

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

Kompilowanie kodu

Powyższy przykład jest przeznaczony do użycia z formularzami Systemu Windows i wymaga PaintEventArgseparametru , który jest parametrem PaintEventHandler.

Zobacz też