在 .net 控件上使用背景负色绘制文本 - 混合

问题描述 投票:0回答:2

我想画一个进度条,中间有百分比, 但我希望文本具有背景(对比)颜色。

因此,ProgressBar 填充部分上方的文本部分将为白色,未填充部分上方的部分将为黑色。

我可以简单地通过“作弊”来做到这一点

  • 首先绘制文本的黑色部分
  • 绘制进度矩形(它将覆盖要隐藏的部分)
  • 仅在进度矩形上绘制白色文本(剪切它)

在此应用程序中,绘制文本两次对性能的影响可以忽略不计,但我很感兴趣是否有一些简单的方法可以通过 blending 只需两步即可完成(例如让进度条以某种方式反转已绘制的文本) .

c# .net winforms graphics
2个回答
4
投票

你所做的一切都很好。像 SetROP2() 这样的老技巧在文本抗锯齿时不再起作用,尤其是在 ClearType 渲染时。颜色错误的混叠像素非常明显。因此 Graphics.CompositingMode 不再支持这些效果。


0
投票

可以使用XOR来计算负(反转)颜色;

Public Function InvertColor(color As Long) As Long
    Return (color Xor &HFFFFFF)
End Function
© www.soinside.com 2019 - 2024. All rights reserved.