.vssettings文件(Visual Studio设置)颜色格式

问题描述 投票:10回答:3

我正在为基于Visual Studio主题的Sublime文本创建自己的配色方案。

Visual Studio主题定义了前景和背景,但它们不在标准RGB三元组中。我不知道这个数字意味着什么,我想知道如何将它转换为RGB三元组(即#FFFFFF)以用于Sublime Text。

样品:

<Item Name="Comment" Foreground="0x007B7466" Background="0x02000000" BoldFont="No"/>
<Item Name="Plain Text" Foreground="0x00F3F2F1" Background="0x002A2822" BoldFont="No"/>
<Item Name="Selected Text" Foreground="0x00FFFFFF" Background="0x0064614F" BoldFont="No"/>

我试过在这里和谷歌搜索,但显然我无法正确找到我的搜索条件以找到正确的答案。

visual-studio hex rgb sublimetext vssettings
3个回答
5
投票

这些看起来一目了然(并且有一些关于MS如何处理颜色的知识)是十六进制形式的ARGB或XRGB DWORD。但是,根据您正在做的事情,它们可能是A / XBGR。

最有可能的是,前两个字符是alpha,然后是红色,绿色和蓝色。这是一种非常标准的颜色布局方式,因为它整齐地适合存储器寄存器并匹配几种格式的纹理数据。

但是,有些地方喜欢反转它,这与其他纹理格式相匹配。 A / X保持在开始,然后是蓝色,绿色和红色。

通过提供0x00FF0000,这应该很容易测试。如果是蓝色,则BGR,如果是红色,则为RGB。

他们可能将第一个通道/字节用作alpha以外的其他东西。将数据打包到3通道纹理的alpha通道中并不罕见。但是,只有一种颜色是0x02 ......,其余颜色都是0x00 ...,所以我不会这样做(那里也有一个3.5字节的颜色,所以也许是拼写错误)。

您不需要对这些进行任何转换,因为它们已经是十六进制(实际代码十六进制,而不是#... web内容)。要“转换”一个Web十六进制三元组,只需删除#和前置0x00,你应该是好的。所有其他字符保持不变(情况应该无关紧要,尽管有些人喜欢大写作为过程)。


16
投票

就像FYI一样,vsettings文件使用BGR而不是RGB


0
投票

如果有人需要解析VSSettings颜色,您可以使用此代码(使用新的Span API):

// input is like "0x008CFAF1", ABGR
var color = abgr.AsSpan();
byte blue = byte.Parse(color.Slice(4, 2), NumberStyles.AllowHexSpecifier);
byte green = byte.Parse(color.Slice(6, 2), NumberStyles.AllowHexSpecifier);
byte red = byte.Parse(color.Slice(8, 2), NumberStyles.AllowHexSpecifier);
return Color.FromRgb(red, green, blue);

如果您无法访问AsSpan(),可以将Slice操作更改为Substring

© www.soinside.com 2019 - 2024. All rights reserved.