如何在 xib 的 xml 文件的 NSRGB 标签中编码十六进制颜色?
Posted
技术标签:
【中文标题】如何在 xib 的 xml 文件的 NSRGB 标签中编码十六进制颜色?【英文标题】:How to encode hexadecimal color in NSRGB tag of xml file of xib? 【发布时间】:2012-05-07 11:32:37 【问题描述】:我的任务是使用其所有参数(例如背景颜色)动态创建 xib 文件。 我通过创建 xml 内容然后编写 xib 文件来创建 xib 文件。 我只能对其特定颜色进行编码,例如对于黑色 NSRGB 标签是 -
<object class="NSColor" key="IBUITextColor" id="1026485712">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MCAwIDAAA</bytes>
</object>
对于红色 -
<object class="NSColor" key="IBUITextColor">
<int key="NSColorSpace">2</int>
<bytes key="NSRGB">MC45MzcyNTQ5NjUzIDAgMC4yMDM5MjE1ODYzAA</bytes>
</object>
我不知道如何将其他十六进制颜色代码 (#0000CD) 转换为这种编码颜色 NSRGB (MC45MzcyNTQ5NjUzIDAgMC4yMDM5MjE1ODYzAA)。我不知道为 NSRGB 颜色代码编码十六进制颜色的标准。
【问题讨论】:
【参考方案1】:我打赌您列出的“红色”是 (239,0,52) 或 #EF0035。如果我是对的,我想我已经弄清楚了……
我正在使用 .NET 来执行此操作,但我认为您可以在 Objective-C 中找到它。
你会想要这样做:
将十六进制值转换为十进制值:
#0000CD --> (0,0,205)
将每个十进制值除以 255 并保留最多 10 位:
(0,0,205) --> (0,0,0.8039215686)
将这些值变成一个字符串,每个值用空格分隔(末尾没有空格):
0 0 0.8039215686
将其转换为字节数组:
48 32 48 32 48 46 56 48 51 57 50 49 53 54 56 54
在末尾添加一个“零”字节0
:
48 32 48 32 48 46 56 48 51 57 50 49 53 54 56 54 0
现在,只需将其转换为 base64 字符串。我对#0000CD
的结果是:
MCAwIDAuODAzOTIxNTY4NgA=
我认为最后的 =
只是一个占位符,但这不是我的专业领域。
注意:在第一个值(“MCAwIDAAA”)的末尾有一个额外的A
,我还没弄清楚;你确定那是 3 A 而不是 2?
希望这会有所帮助!
【讨论】:
【参考方案2】:正确答案是: 你应该只解码base64字节“MCAwIDAAA” 例如:
红色 MSAwIDAAA ----base64 解码---> 1 0 0
橙色 MSAwLjUgMAA ----base64 解码---> 1 0.5 0
你捕捉到颜色 RGB 值!
【讨论】:
以上是关于如何在 xib 的 xml 文件的 NSRGB 标签中编码十六进制颜色?的主要内容,如果未能解决你的问题,请参考以下文章