Nasıl yapılır: Görüntülerdeki Alfa Değerleri Ayarlamak için Renk Matrisi Kullanma

sınıfı Bitmap (sınıfından devralan) ve sınıfı piksel değerlerini Image alma ve ayarlama işlevleri ImageAttributes sağlar. Bir görüntünün tamamına yönelik alfa değerlerini değiştirmek için sınıfını kullanabilir veya piksel değerlerini tek tek ImageAttributes değiştirmek için sınıfının yöntemini SetPixelBitmap çağırabilirsiniz.

Örnek

sınıfının, ImageAttributes işleme sırasında görüntüleri değiştirmek için kullanabileceğiniz birçok özelliği vardır. Aşağıdaki örnekte tüm alfa ImageAttributes değerlerinin yüzde 80'ine ayar yapmak için bir nesnesi kullanılmıştır. Bu, bir renk matrisi başlatarak ve matriste alfa ölçeklendirme değeri 0,8 olarak ayarlanmadan yapılır. Renk matrisinin adresi nesnesinin SetColorMatrixImageAttributes yöntemine, nesnesi ise ImageAttributes nesnesinin DrawString yöntemine Graphics geçirildi.

İşleme sırasında bit eşlem içinde alfa değerleri, bunların yüzde 80'ine dönüştürülür. Bunun sonucunda arka planla karıştıran bir görüntü elde edersiniz. Aşağıdaki çizimde gösterildiği gibi bit eşlem resmi saydam olarak görüntülenir; üzerinden düz siyah çizgiyi de ebilirsiniz.

Screenshot of alpha blending using a matrix.

Görüntünün arka plandaki beyaz kısmın üzerinde yer alan görüntü, beyaz renkle karıştırıldı. Görüntünün siyah çizgiyi kesiştir olduğu yerde görüntü siyah renkle karıştırıldı.

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

Kod Derleniyor

Yukarıdaki örnek, Windows Forms ile birlikte kullanım için tasarlanmıştır ve parametresi PaintEventArgse olan 'i PaintEventHandler gerektirir.

Ayrıca bkz.