将 GDI+ 与 Windows 窗体一起使用,我希望能够用笔绘制并根据目标像素颜色混合颜色。
例如,如果我画一条线并且它通过黑色像素,我希望它是较浅的颜色(例如白色),以便它可见。当同一条线经过白色像素时,它应该是较暗的颜色(例如黑色),以便它仍然清晰可见。
有没有办法用 GDI+ 做到这一点?
正如 Hans Passant 建议的那样,您可以使用画布中当前的内容作为纹理画笔的图像进行绘制(您可能需要双缓冲才能正常工作)并使用 aColorMatrix
来修改画布上绘制的颜色。
有一个颜色矩阵可以反转类似于 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
.
您可以尝试对笔颜色进行异或运算。Paint.NET 使用选择边框来做到这一点,使其在任何颜色上都可见。
哦,我不认为这太难了。您可以创建一支笔,它会根据它所在的位置自动更改颜色。只需读取笔所在位置的像素(参见示例),获取 Alpha 组件,如果分别大于或小于 255/2,则将笔颜色设置为黑色或白色:)