剪切颜色
切变可按照与另一个颜色分量成比例的量增加或减少某个颜色分量。 例如,假设有一种转换将红色分量增加蓝色分量值的一半。 在这种转换下,颜色 (0.2, 0.5, 1) 将变为 (0.7, 0.5, 1)。 新的红色分量为 0.2 + (1/2)(1) = 0.7。
以下示例从 ColorBars4.bmp 文件构造 Image 对象。 然后,代码将上一段中所述的切变转换应用于图像中的每一个像素。
Image image(L"ColorBars4.bmp");
ImageAttributes imageAttributes;
UINT width = image.GetWidth();
UINT height = image.GetHeight();
ColorMatrix colorMatrix = {
1.0f, 0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f, 0.0f,
0.5f, 0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
imageAttributes.SetColorMatrix(
&colorMatrix,
ColorMatrixFlagsDefault,
ColorAdjustTypeBitmap);
graphics.DrawImage(&image, 10, 10, width, height);
graphics.DrawImage(
&image,
Rect(150, 10, width, height), // destination rectangle
0, 0, // upper-left corner of source rectangle
width, // width of source rectangle
height, // height of source rectangle
UnitPixel,
&imageAttributes);
下图显示了左侧的原始图像和右侧的剪切图像。
下表显示了剪切转换前后四条条的颜色向量。
原始 | 切变后 |
---|---|
(0, 0, 1, 1) | (0.5, 0, 1, 1) |
(0.5, 1, 0.5, 1) | (0.75, 1, 0.5, 1) |
(1, 1, 0, 1) | (1, 1, 0, 1) |
(0.4, 0.4, 0.4, 1) | (0.6, 0.4, 0.4, 1) |