有趣的一个。我确实做了一些谷歌搜索,但我们走了。我有这个png文件。我想要做的是将它放在我的iPhone上并将其发送到Windows上的服务器应用程序。我使用这样的东西:
NSString *filePath = [[NSBundle mainBundle] pathForResource:IconFile ofType:@"png"];
NSData *icon = [[NSData alloc ] initWithContentsOfFile:filePath];
NSLog(@"File path is %@",filePath);
NSLog(@" Bytes to send in Icon File %d",icon.length);
现在,当我在iPhone模拟器上时这很好用。当我去设备时,虽然png格式的大小增加了。例如,我有一个2514字节,最多2652字节。当我传输此文件时 - 它无法被Windows应用程序读取。
所以我假设当png文件被复制到资源包中时 - 它必须得到优化或者其他东西。我可以通过将扩展名改为.txt来解决它 - 然后文件没有改变。
有谁知道为什么会这样?你可以防止它被改变,因为我宁愿保持正确的扩展。我已经看到png格式需要在从iPhone上获取它们时进行转换,但我不知道为什么在上传它时会发生这种情况并且它在模拟器模式下不起作用。适用于iOS 5的iPhone和iPad。
答案 0 :(得分:4)
在构建设置中可以防止修改png图像 - 在Packaging下有一个压缩PNG文件的选项:
将此设置为NO可以解决您的问题。
答案 1 :(得分:1)
本文档中记录了所发生的情况:Viewing iPhone-Optimized PNGs
简而言之,Apple正在使用他们的补丁版本的pngcrush(注意,这个版本与sourceforge提供的版本不同)。他们的优化包括预先计算alpha值以加快加载过程。
如链接文档所述,您可以根据需要恢复此优化(例如,在撤消现有应用时)。
阻止此优化的最简单方法是在将这些图像添加到项目时更改/删除文件扩展名。
答案 2 :(得分:0)
PNG将转换为“针对iPhone优化”的格式。现在这正是我所读到的,我不确定优化是什么,如果它实际上是优化,但这就是Apple选择做的。由于硬件支持,也许iPhone GPU可以更快地加载自己的格式。
在任何情况下,当您部署项目时,所有PNG图像都会发生这种情况,并且我无法阻止它。
如果您的应用从远程服务器下载PNG,则不会进行此优化,您可以自由使用该文件。
答案 3 :(得分:0)
是的,Apple优化了所有可在iPhone上显示的PNG。例如,如果您在Finder中转到iOS .app
并查看其“内容”,您会发现所有PNG都无法在Mac OS X上正确显示。
解决方案是将文件导入为“文件”而不是“图像”。一种简单的方法是删除扩展名,然后将其拖入项目中。另一种方法是在Xcode中选择图像并更改助理编辑器中标识和类型部分下的文件类型。