iOS UIImage无法显示JPEG图像

4
我在我的iOS应用程序中遇到了一些图像显示问题。我将一些图形从PNG格式更改为JPG文件格式,并且当我删除了项目中已经存在的PNG图像并添加新的JPG文件时,模拟器仍然显示旧的PNG图像。我对该项目进行了“清理”操作,并重置了模拟器的内容,但现在它根本不想加载这些图像 - [UIImage imageNamed:@"filename"] 返回 null。
另一方面,如果我将这些图形保存为PNG,并将它们添加到项目中而不是JPEG,则可以正常加载它们。但是这些图像是照片,而PNG版本比JPEG大7-8倍,因此我真的想弄清楚为什么它无法加载它们。
编辑:在审核文档(看起来像是第100次)后,我意识到错误在于我没有指定扩展名。支持的图像格式 (http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIImage_Class/Reference/Reference.html) 列出了许多支持的格式,而UIImage参考说:

在iOS 4及以上版本中,如果文件是以PNG格式存储的,则不需要指定 .PNG 文件扩展名。

我误读了这个意思,认为扩展名总是可选的,但如果文件不是PNG,则必须包括扩展名。因此,如果文件名为my_image.png,则可以使用@"my_image"或@"my_image.png"传递它,但如果有my_image.jpg,则只能使用@"my_image.jpg"。

1
尝试删除 build 文件夹并重新运行应用程序。 - Abhishek Bedi
2个回答

8

方法imageNamed:只会加载项目中的*.png资源。尝试使用

  NSString *filePath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"imageName"] ofType:@"jpg"];
  UIImage *theImage = [UIImage imageWithContentsOfFile:filePath];

1
谢谢你的提示,事实证明imageNamed:并不不能加载JPG图像,而是你必须明确指定@"filename.jpg",而我没有这样做。 - SaltyNuts
不,还是一样的,仍然无法加载。当我尝试从资源中加载jpg时,我也遇到了你的同样的问题。 - Nathan Ou
1
也许你的问题是由于其他原因引起的。对我来说,“[UIImage imageNamed:@"flower.jpg"]”运行得非常好。 - SaltyNuts
苹果的文档指出,省略 .png 只是一种方便(即 imageNamed: 接受 .jpg 扩展名)。此外,需要注意的是,imageNamed 首先会查找缓存,而 imageWithContentsOfFile: 不会,这是一个很大的区别。 - Chris Trahey

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接