如何加载存储在静态库中的图像
-
05-07-2019 - |
题
在我的 iPhone 应用程序中,我链接到一个包含目标 C 文件和图像的静态库。是否可以从静态库加载图像?我努力了
[UIImage imageNamed:[[NSBundle mainBundle] pathForResource:@"imageName" ofType:@"png"]];
但显然该图像不在主包中,它在静态库中,并且 NSBundle 类似乎只提供对主包和具有已知路径的包的访问。有没有办法从 iPhone 上的静态库加载图像?
解决方案
“静态库中的图像是什么”并不清楚你的意思。静态库是普通文件(扩展名为.a),包含存档的目标文件。另一方面,Bundle是目录层次结构(包含可执行文件和其他资源)。
如果链接静态库,则库中的代码将直接包含在您的可执行文件中。没有文件被复制到应用程序包中,因此无法复制图像。
如果您的图像文件包含静态库,则可以通过在Xcode中向目标添加复制文件构建阶段,将其复制到应用程序包中。
其他提示
最简单的方法是将图像存储在内联字符数组中:
const char imageData[] = { 0x00, 0x01, 0xFF, ... };
稍后当你需要它时:
UIImage *image = [UIImage imageWithData:[NSData dataWithBytesNoCopy:imageData length:sizeof(imageData) freeWhenDone:NO]];
您必须手动将图像的二进制数据(保存为 PNG 或 JPEG 后)转换为字符数组(或编写脚本来执行此操作)
您是否在静态库复制文件构建阶段使用绝对路径并将其指向客户端应用程序?我试过这样的东西,但仍然无法访问图像。
不隶属于 StackOverflow