Share via


如何:轉譯影像色彩

翻譯會將值新增至四個色彩元件的一或多個。 下表提供代表翻譯的色彩矩陣專案。

要翻譯的元件 矩陣專案
[4][0]
[4][1]
藍色 [4][2]
Alpha [4][3]

範例

下列範例會 Image 從 ColorBars.bmp 檔案建構 物件。 然後程式碼會將 0.75 新增至影像中每個圖元的紅色元件。 原始影像會與已轉換的影像一起繪製。

下圖顯示左側的原始影像和右側已轉換的影像:

Screenshot of the original and transformed image.

下表列出紅色轉譯前後四列的色彩向量。 請注意,因為色彩元件的最大值是 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)
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)

編譯程式碼

上述範例是為了搭配 Windows Form 使用而設計,且其需要 PaintEventArgse,這是 Paint 事件處理常式的參數。 將 取代 ColorBars.bmp 為您系統上有效的映射檔名稱和路徑。

另請參閱