gpt4 book ai didi

c# - 无法使用 Color.FromArgb 设置透明度(但 Color.Transparent 有效)

转载 作者:太空宇宙 更新时间:2023-11-03 12:17:57 25 4
gpt4 key购买 nike

我要更改为他的颜色的控件是一个ToolStripItem。当我使用这个

 item.BackColor = Color.Black;
item.ForeColor = Color.Transparent;

它按预期工作

enter image description here

但是当我尝试这个的时候

item.BackColor = Color.Black;
item.ForeColor = Color.FromArgb(0, 255, 255, 255);

或者这个

item.BackColor = Color.White;
item.ForeColor = Color.FromArgb(0, 0, 0, 0);

alpha 分量就像被完全忽略了

enter image description here

知道问题出在哪里吗?

编辑:现在我知道问题出在哪里,但我仍然无法对文本使用透明度。一些附加信息:我需要更改其文本颜色的项目是 ToolStripMenuItem。所有项目都需要有不同的颜色,所以我不能只为我的 MenuStrip 使用渲染器。

非常感谢!

最佳答案

ToolStripRenderer 使用 TextRenderer.DrawText,后者使用 WindowsGraphics.DrawText ` 使用 GDI 函数绘制文本。

对于Color.Transparent,它不渲染任何东西。对于其他颜色,GDI 函数忽略 ARGB 颜色的 alpha 部分。

幕后发生了什么?

WindowsGraphics.DrawText 的内部实现中,您可以看到如果颜色为 Color.Transparent,则有一个不绘制文本的特定条件。

所以对于 Color.Transparent 它不绘制文本:

if (string.IsNullOrEmpty(text) || foreColor == Color.Transparent) 
{
return;
}

关于 Color.FromArgb(0,x,​​y,z),因为 Color.TransparentColor.FromArgb(0,x,​​y,z ) 不一样,所以它会在您传递 Color.FromArgb(0,x,​​y,z) 时尝试绘制文本。它使用 COLORREF要传递给 SetTextColor 的结构.你会看到它总是忽略 A 值:

When specifying an explicit RGB color, the COLORREF value has the following hexadecimal form:

0x00bbggrr

The low-order byte contains a value for the relative intensity of red; the second byte contains a value for green; and the third byte contains a value for blue. The high-order byte must be zero.

如何绘制透明/半透明文字?

如果您需要对绘制字符串的透明度支持,您可以重写 ToolStripRendererOnRenderItemText 方法并改用 Graphics.DrawString

关于c# - 无法使用 Color.FromArgb 设置透明度(但 Color.Transparent 有效),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48917474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com