如何加载存储在静态库中的图像

时间:2009-09-09 20:54:19

标签: iphone image static-libraries

在我的iphone应用程序中,我正在链接一个包含目标c文件和图像的静态库。是否可以从静态库加载图像?我试过了

[UIImage imageNamed:[[NSBundle mainBundle] pathForResource:@"imageName" ofType:@"png"]];

但显然图像不在主包中,它位于静态库中,而NSBundle类似乎只提供对主包的访问以及对已知路径的包的访问。有没有办法从iPhone上的静态库加载图像?

3 个答案:

答案 0 :(得分:12)

最简单的方法是将图像存储在内联字符数组中:

const char imageData[] = { 0x00, 0x01, 0xFF, ... };

以后当你需要它时:

UIImage *image = [UIImage imageWithData:[NSData dataWithBytesNoCopy:imageData length:sizeof(imageData) freeWhenDone:NO]];

您必须手动将图像的二进制数据(保​​存为PNG或JPEG后)转换为字符数组(或编写脚本)

答案 1 :(得分:1)

“图像在[...]静态库中”并不清楚你的意思。静态库是普通文件(扩展名为.a),包含存档的目标文件。另一方面,Bundle是目录层次结构(包含可执行文件和其他资源)。

如果链接静态库,则库中的代码将直接包含在您的可执行文件中。没有文件被复制到应用程序包中,因此无法复制图像。

如果您的图像文件包含静态库,则可以通过在Xcode中向目标添加复制文件构建阶段,将其复制到应用程序包中。

答案 2 :(得分:0)

您是否在静态库复制文件构建阶段使用绝对路径并将其指向客户端应用程序?我试过这样的东西,但仍然无法访问图像。