与GDI +高级色彩混合

时间:2012-12-21 21:07:23

标签: c# winforms colors gdi+ blending

在Windows窗体中使用GDI +,我希望能够使用笔绘制并根据目标像素颜色混合颜色。

例如,如果我画一条线并且它经过黑色像素,我希望它是一种较浅的颜色(例如白色),以便它可见。当同一条线经过白色像素时,它应该是较暗的颜色(例如黑色),以便它仍然清晰可见。

有没有办法用GDI +做到这一点?

3 个答案:

答案 0 :(得分:3)

正如Hans Passant所提出的那样,你可以使用画布中当前的内容作为纹理画笔的图像进行绘画(你可能需要双重缓冲以使其正常工作)并使用ColorMatrix来修改正在绘制的颜色在画布上。

有一个颜色矩阵可以反转类似于XOR的颜色,问题是它不适用于中间灰色。反转RGB并保持alpha完整的颜色矩阵将是:

-1, 0, 0, 0, 0
 0,-1, 0, 0, 0
 0, 0,-1, 0, 0
 0, 0, 0, 1, 0
 1, 1, 1, 0, 1

类似的东西,尽管速度较慢,但​​是将画布复制到图像并使用规则处理每个像素的图像像素,例如,如果颜色比0.5更亮,则使其稍微变暗,使其稍微更亮。然后,使用该处理过的图像作为纹理画笔进行绘制。这会产生更好的结果,但它会比使用ColorMatrix明显慢。

答案 1 :(得分:1)

您可以尝试对笔颜色进行异或。 Paint.NET使用选择边框执行此操作,使其在任何颜色上都可见。

答案 2 :(得分:0)

哦,我不认为这太难了。您可以创建一个笔,根据它的位置自动更改颜色。只需读取笔位置所在的像素(参见示例),获取Alpha组件,如果分别大于或小于255/2,则将笔颜色设置为黑色或白色:)