将 GDI+ 与 Windows 窗体结合使用,我希望能够使用钢笔绘图并根据目标像素颜色混合颜色。
例如,如果我画一条线并且它经过黑色像素,我希望它是较浅的颜色(例如白色)以便它可见。当同一条线经过白色像素时,它应该是较暗的颜色(例如黑色),这样它仍然清晰可见。
有什么方法可以用 GDI+ 做到这一点吗?
最佳答案
正如 Hans Passant 所建议的那样,您可以使用 Canvas 中当前的图像作为纹理画笔的图像进行绘画(您可能需要双缓冲才能使其正常工作)并使用 ColorMatrix
修改在 Canvas 上绘制的颜色。
有一个颜色矩阵可以反转类似于异或的颜色,问题是它不适用于中间灰色。反转 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
类似的方法是将 Canvas 复制到图像,并使用规则处理每个像素的图像像素,例如如果颜色比 0.5 亮,则使其稍微暗一些,否则使其稍微亮一些。然后,您使用该处理过的图像作为纹理画笔进行绘画。这会提供更好的结果,但会比使用 ColorMatrix
慢得多。
关于c# - 使用 GDI+ 进行高级颜色混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13997178/