与GDI +进行高级颜色混合

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

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

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


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

有一种颜色矩阵可以反转类似于异或的颜色,问题在于它不适用于中间灰色。 反转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慢得多。


你可以尝试XORing笔的颜色。 Paint.NET通过选择边框完成此操作,使其可以以任何颜色显示。


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

链接地址: http://www.djcxy.com/p/67761.html

上一篇: Advanced color blending with GDI+

下一篇: OCR with perceptron neural network of Aforge.net answers wrong