如何:转换图像颜色

更新:2007 年 11 月

平移是指在这四个颜色分量中的一个或多个中添加值。下表给出表示平移的颜色矩阵项。

要平移的分量

矩阵项

红色

[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 窗体而设计的,它需要 Paint 事件处理程序的参数 PaintEventArgse。用系统中有效的图像文件名和路径替换 ColorBars.bmp 。

请参见

参考

ColorMatrix

ImageAttributes

其他资源

Windows 窗体中的图形和绘制

对图像重新着色