与GDI +高级色彩混合

Tre*_*ott 8 c# gdi+ blending colors winforms

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

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

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

Coi*_*oin 3

正如 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
Run Code Online (Sandbox Code Playgroud)

类似的方法(尽管速度较慢)是将画布复制到图像,并按照规则逐像素处理该图像像素,例如如果颜色比 0.5 亮,则使其稍微暗一些,否则使其稍微亮一些。然后,您使用经过处理的图像作为纹理画笔进行绘画。这会产生更好的结果,但会比使用ColorMatrix.