使用 GDI+ 绘制各种颜色:
brush = new SolidBrush(color);
graphics.FillRectangle(brush, x, y, width, height);
您会注意到玻璃上没有正确显示不透明的颜色:
如何在玻璃上绘制纯色?
您还会注意到,完全不透明的颜色会根据它的颜色进行不同的处理:
- 不透明黑色:完全透明
- 不透明颜色:部分透明
- 不透明白色:完全不透明
谁能指出我在桌面合成器上解释如何处理不同颜色的文档?
更新 3
您还会注意到它的FillRectangle
行为不同于FillEllipse
:
FillEllipse
with an opaque color 绘制不透明颜色FillRectangle
使用不透明颜色绘制部分(或完全)透明
请解释无意义的行为。
更新 4
Alwayslearning建议我更改合成模式。来自MSDN:
合成模式枚举
CompositingMode枚举指定渲染颜色如何与背景颜色组合。此枚举由Graphics
Graphics::GetCompositingMode
类的'Graphics::SetCompositingMode'方法使用。CompositingModeSourceOver
指定在渲染颜色时,将其与背景颜色混合。混合由正在渲染的颜色的 alpha 分量决定。
CompositingModeSourceCopy
指定在呈现颜色时,它会覆盖背景颜色。此模式不能与 TextRenderingHintClearTypeGridFit 一起使用。
从 的描述来看CompositingModeSourceCopy
,这听起来不是我想要的选项。从它施加的限制来看,这听起来像是我想要的选择。并且在禁用合成或透明度的情况下,它不是我想要的选项,因为它执行SourceCopy,而不是SourceBlend:
幸运的是,这不是我必须考虑的邪恶,因为它不能解决我的实际问题。构建我的graphics
对象后,我尝试更改合成模式:
graphics = new Graphics(hDC);
graphics.SetCompositingMode(CompositingModeSourceCopy); //CompositingModeSourceCopy = 1
结果对输出没有影响:
笔记
- Win32 原生
- 不是 .NET(即本机)
- 不是 Winforms(即原生)
- GDI+(即原生)