如何:翻译图像颜色

翻译向四种颜色组件中的一个或多个添加值。 下表中提供了表示翻译的颜色矩阵条目。

要翻译的组件 矩阵条目
红色 [4][0]
绿色 [4][1]
[4][2]
阿尔法 [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)
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替换为在您系统上有效的图像文件名和路径。

另请参阅