Nasıl yapılır: Görüntü Renklerini Çevirme

Çeviri, dört renk bileşeninden bir veya daha fazlası için bir değer ekler. Çevirileri temsil eden renk matrisi girişleri aşağıdaki tabloda verilmiştir.

Çevrilen bileşen Matris girişi
Kırmızı [4] [0]
Yeşil [4] [1]
Mavi [4] [2]
Alfa [4] [3]

Örnek

Aşağıdaki örnek, dosya Image dosyasından bir nesnesi ColorBars.bmp. Ardından kod, görüntüde her pikselin kırmızı bileşenine 0,75 ekler. Özgün görüntü, dönüştürülmüş görüntüyle birlikte çizilir.

Aşağıdaki çizimde, sol tarafta özgün görüntü ve sağ tarafta dönüştürülmüş görüntü gösterilmiştir:

Özgün ve dönüştürülmüş görüntünün ekran görüntüsü.

Aşağıdaki tabloda kırmızı çeviriden önce ve sonra gelen dört çubuk için renk vektörleri liste almaktadır. Bir renk bileşeni için en yüksek değer 1 olduğundan ikinci satırdaki kırmızı bileşenin değişmey olduğunu unutmayın. (Benzer şekilde, bir renk bileşeni için en düşük değer 0'dır.)

Özgün Çevrilmiş
Siyah (0, 0, 0, 1) (0.75, 0, 0, 1)
Kırmızı (1, 0, 0, 1) (1, 0, 0, 1)
Yeşil (0, 1, 0, 1) (0.75, 1, 0, 1)
Mavi (0, 0, 1, 1) (0.75, 0, 1, 1)
Image image = new Bitmap("ColorBars.bmp");
ImageAttributes imageAttributes = new ImageAttributes();
int width = image.Width;
int height = image.Height;

float[][] colorMatrixElements = {
   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,  1, 0},
   new float[] {.75f, 0, 0, 0, 1}};

ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);

imageAttributes.SetColorMatrix(
   colorMatrix,
   ColorMatrixFlag.Default,
   ColorAdjustType.Bitmap);

e.Graphics.DrawImage(image, 10, 10, width, height);

e.Graphics.DrawImage(
   image,
   new Rectangle(150, 10, width, height),  // destination rectangle
   0, 0,        // upper-left corner of source rectangle
   width,       // width of source rectangle
   height,      // height of source rectangle
   GraphicsUnit.Pixel,
   imageAttributes);
Dim image As New Bitmap("ColorBars.bmp")
Dim imageAttributes As New ImageAttributes()
Dim width As Integer = image.Width
Dim height As Integer = image.Height

Dim colorMatrixElements 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, 1, 0}, _
   New Single() {0.75F, 0, 0, 0, 1}}

Dim colorMatrix As New ColorMatrix(colorMatrixElements)

imageAttributes.SetColorMatrix( _
   colorMatrix, _
   ColorMatrixFlag.Default, _
   ColorAdjustType.Bitmap)

e.Graphics.DrawImage(image, 10, 10, width, height)

' Pass in the destination rectangle (2nd argument), the upper-left corner 
' (3rd and 4th arguments), width (5th argument),  and height (6th 
' argument) of the source rectangle.
e.Graphics.DrawImage( _
   image, _
   New Rectangle(150, 10, width, height), _
   0, 0, _
   width, _
   height, _
   GraphicsUnit.Pixel, _
   imageAttributes)

Kod Derleniyor

Yukarıdaki örnek, Windows Forms ile kullanım için tasarlanmıştır ve olay PaintEventArgs e işleyicinin bir parametresi olan Paint 'i gerektirir. yerine ColorBars.bmp sisteminiz üzerinde geçerli olan bir görüntü dosyası adı ve yolu yazın.

Ayrıca bkz.