2

我的任务是使用其所有参数(例如背景颜色)动态创建 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 颜色代码编码十六进制颜色的标准。

4

2 回答 2

5

我打赌你列出的“红色”是(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=

我认为=最后只是一个占位符,但这不是我的专业领域。

注意:A第一个值(“MCAwIDAAA”)的末尾有一个我没有弄清楚的额外你确定那是 3 A 而不是 2?

希望这可以帮助!

于 2012-05-07T17:39:58.260 回答
2

正确的答案是:您应该只解码 base64 字节“MCAwIDAAA”,例如:

红色 MSAwIDAAA ----base64 解码---> 1 0 0

橙色 MSAwLjUgMAA ----base64 解码---> 1 0.5 0

你抓住了颜色的RGB值!

于 2013-04-10T02:27:57.180 回答