我想从指定的路径位置从IImage对象获取图像。这是代码。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writablePath = [documentsDirectory stringByAppendingPathComponent:@"image1.png"];
NSLog(writablePath);
UIImage *image=[UIImage imageNamed:writablePath];
我得到的图像对象为零。那可能是什么问题呢? 我还改变了image1.Path上的image1.png。
答案 0 :(得分:7)
我相信UIImage imageNamed会从应用程序包中查找图像,而不是通过完整路径查找图像。您可以使用UIImage imageWithContentsOfFile从完整路径加载(但不会被缓存),或者只是将图像放入捆绑包中并使用imageNamed。
您还需要检查文件是否实际放在应用程序包中,而不仅仅是放在项目目录中。
答案 1 :(得分:0)
你的问题的确切答案是你得到的是因为你正在使用imageNamed:它使用给定(路径)名称 relative 查找图像到束根(即。已部署的应用程序中的app目录),而您正在为其提供文档目录的绝对路径。
您实际上可以使用imageNamed从捆绑包的子目录中加载图像。 这需要两件事:
您的图像实际上位于已部署的包中的子目录中,而不仅仅是XCode项目中的子目录或组 - 因为它们会折叠到根目录中。 换句话说,您需要在XCode(文件夹引用)中使用“蓝色组”。
您在imageNamed中使用相对路径。
所以[UIImageView imageNamed:@“subdir / foo”]将加载foo.png或foo@2x.png,其中这些文件出现在XCode中名为“subdir”的“蓝色”组中。
您可以使用它来在文档的子目录中找到图像,因为您知道相对于您的文件夹创建文档的位置,但这有点hacky。要从文档加载图像,您应该使用imageWithContentsOfFile:而不是imageNamed:
我厌倦了寻找这种事情的答案并做了一些测试,详细说明了这个以及其他结果(带图片!)来回答这个问题:
答案 2 :(得分:0)
我想用这个:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writablePath = [documentsDirectory stringByAppendingPathComponent:@"image1.png"];
NSLog(writablePath);
===而不是上面写这个===
<强> UIImage *image=[UIImage imageWithContentsOfFile:writablePath];
强>