在 Xcode 中,如何以编程方式从 .icns 文件中提取 .png 图像?
Posted
技术标签:
【中文标题】在 Xcode 中,如何以编程方式从 .icns 文件中提取 .png 图像?【英文标题】:In Xcode, how do I extract .png image from an .icns file programmatically? 【发布时间】:2014-07-04 05:40:50 【问题描述】:ios7 和 Xcode 的初学者。如果我理解得很好,.icns 文件是一个容器而不是图像。它包含不同尺寸和不同扩展名(例如 png、jpg)的图标和可能的其他内容。对还是错?
如果是这样,有没有办法从这个文件中提取 512x512.png 版本的图标?有人告诉我必须使用 NSdata 来获取 .icns 文件的内容,然后将其子串化以获取图像数据。但我不知道 512x512.png 的代码块从哪里开始到哪里结束?
我希望我的问题是正确的。我是新手。
感谢您的帮助
【问题讨论】:
曾经使用过***:en.wikipedia.org/wiki/Apple_Icon_Image_format? 感谢您的意见。事实上,我之前已经咨询过建议的 Wikipedia 页面。但是,根据该文件,似乎包含许多可变长度(字节)的图像。因此,如果我要选择一个图像(让我们以 ic09 为例),我将不知道块的开始在哪里,因为事先还有其他可变长度的图像。如果所有图像都是固定长度的,则很容易访问预期的图像。作为一个新手恐怕没有帮助。 【参考方案1】:我没有准备好任何代码(尽管您可能想查看libicns)。
基本上,您必须按顺序读取文件内容。首先,您阅读标题(8 个字节)。然后在标题之后,您逐个阅读图标。每个图标以包含类型和长度的 8 字节标题开头。您阅读类型和长度,如果类型不匹配,则跳过图标并继续下一个。
找到所需的图标后,您可以提取它。它在长度字段之后开始,长度为 length - 8 个字节(长度包括仅 icns 文件格式需要的标头)。
请注意,长度以最高有效位在前(大端)存储,但 iOS 是小端。所以你需要转换数字。
图标类型可以被视为四个字符的字符串(没有尾随零)或无符号的 4 字节数字。一些编译器可以将'ic09'
视为无符号整数常量(注意单引号与字符串的双引号)。
【讨论】:
以上是关于在 Xcode 中,如何以编程方式从 .icns 文件中提取 .png 图像?的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有 XIB 文件的情况下以编程方式更新 Xcode 中的 UILabel?
如何以编程方式在 Xcode 中快速设置 UIPageViewController 的过渡样式?
Xcode - 我如何以编程方式在容器视图中嵌入/更改视图控制器?