iOS7和Xcode的初学者。如果我理解的话,.icns文件是容器而不是图像。它包含不同的大小和不同的扩展名(例如png,jpg)和其他东西。是对还是错?
如果是这样,有没有办法从这个文件中提取512x512.png版本的图标?我被告知我必须使用NSdata来获取.icns文件的内容,然后将其子串以获取图像数据。但我不知道的是512x512.png的代码块从何处开始呢?
我希望我正确地提出我的问题。我是新人。
感谢您的帮助
答案 0 :(得分:3)
我没有准备好任何代码(尽管您可能希望查看libicns)。
基本上,您必须按顺序读取文件内容。首先你读取标题(8个字节)。然后在标题之后,您逐个图标地阅读。每个图标都以包含类型和长度的8字节标题开头。您读取类型和长度,如果类型不匹配,则跳过图标继续下一个。
找到所需图标后,即可将其解压缩。它从长度字段开始,并且 length - 8 字节长(长度包括只有 icns 文件格式所需的标题)。
请注意,长度存储在最高位(大端),但iOS是小端。所以你需要转换数字。
图标类型可以被视为四个字符的字符串(没有尾随零)或无符号的4个字节数。有些编译器可以将'ic09'
视为unsigned int常量(请注意单引号与字符串的双引号)。