如何:转换图像颜色

转换操作将值添加到四个颜色分量中的一个或多个分量。 下表提供了表示转换的颜色矩阵条目。

要转换的分量 矩阵条目
红色 [4][0]
绿色 [4][1]
蓝色 [4][2]
Alpha [4][3]

示例

以下示例从 ColorBars.bmp 文件构造 Image 对象。 然后,代码将 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 窗体,它需要 PaintEventArgse,后者是 Paint 事件处理程序的参数。 将 ColorBars.bmp 替换为系统中有效的图像文件名和路径。

另请参阅