在Windows窗体中使用GDI +,我希望能够使用笔绘制并根据目标像素颜色混合颜色。
例如,如果我画一条线并且它经过黑色像素,我希望它是一种较浅的颜色(例如白色),以便它可见。当同一条线经过白色像素时,它应该是较暗的颜色(例如黑色),以便它仍然清晰可见。
有没有办法用GDI +做到这一点?
答案 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,则将笔颜色设置为黑色或白色:)