共用方式為


HOW TO:轉譯影像色彩

轉換會將四個色彩元素中的一或多個加上一個數值。 代表轉換的色彩矩陣項目列在下表中。

要轉換的元素

矩陣項目

紅色

[4][0]

綠色

[4][1]

藍色

[4][2]

Alpha

[4][3]

範例

下列範例會從 ColorBars.bmp 檔案建構 Image 物件。 然後程式碼會將影像中每一個像素的紅色元素加上 0.75。 原始影像就繪製在變換影像的旁邊。

下圖左邊顯示的是原始的影像,右邊顯示的是變換的影像。

轉譯色彩

下表會列出紅色轉換前後四列的色彩向量。 請注意,由於色彩元素的最大值是 1,因此第二列中的紅色元素並不會變更 (同理,色彩元素的最小值 0)。

原始

轉換的

黑色 (0, 0, 0, 1)

(0.75, 0, 0, 1)

紅色 (1, 0, 0, 1)

(1, 0, 0, 1)

綠色 (0, 1, 0, 1)

(0.75, 1, 0, 1)

藍色 (0, 0, 1, 1)

(0.75, 0, 1, 1)

        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)

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

編譯程式碼

上述範例是專為與 Windows Form 搭配使用而設計的,而且它需要 PaintEventArgs e (即 Paint 事件處理常式的參數)。 請以系統中有效的影像檔名稱和路徑取代 ColorBars.bmp 。

請參閱

參考

ColorMatrix

ImageAttributes

其他資源

Windows Form 中的圖形和繪圖

將影像重新著色