在Xcode中,如何以编程方式从.icns文件中提取.png图像?

时间:2014-07-04 05:40:50

标签: ios xcode ios7

iOS7和Xcode的初学者。如果我理解的话,.icns文件是容器而不是图像。它包含不同的大小和不同的扩展名(例如png,jpg)和其他东西。是对还是错?

如果是这样,有没有办法从这个文件中提取512x512.png版本的图标?我被告知我必须使用NSdata来获取.icns文件的内容,然后将其子串以获取图像数据。但我不知道的是512x512.png的代码块从何处开始呢?

我希望我正确地提出我的问题。我是新人。

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

我没有准备好任何代码(尽管您可能希望查看libicns)。

基本上,您必须按顺序读取文件内容。首先你读取标题(8个字节)。然后在标题之后,您逐个图标地阅读。每个图标都以包含类型和长度的8字节标题开头。您读取类型和长度,如果类型不匹配,则跳过图标继续下一个。

找到所需图标后,即可将其解压缩。它从长度字段开始,并且 length - 8 字节长(长度包括只有 icns 文件格式所需的标题)。

请注意,长度存储在最高位(大端),但iOS是小端。所以你需要转换数字。

图标类型可以被视为四个字符的字符串(没有尾随零)或无符号的4个字节数。有些编译器可以将'ic09'视为unsigned int常量(请注意单引号与字符串的双引号)。