当前位置:  开发笔记 > 编程语言 > 正文

在外部下载的PNG上执行iPhone优化

如何解决《在外部下载的PNG上执行iPhone优化》经验,为你挑选了1个好方法。

将PNG添加到XCode iPhone项目时,编译器会使用pngcrush对其进行优化.一旦在设备上,图像的渲染性能非常快.

我的问题是我的应用程序在运行时从外部源下载PNG(使用Google Data API从Picasa网络相册中下载).不幸的是,这些图像的表现非常糟糕.当我在图像上进行自定义渲染时,它似乎比内部存储的对应物慢100倍.我强烈怀疑这是因为下载的图像尚未优化.

有谁知道如何在iPhone上运行时优化外部下载的PNG?我希望有一个班级能做到这一点.我甚至考虑将pngcrush的源代码添加到我的应用程序中,这似乎很激烈.我自己一直无法找到合适的答案.我会非常感谢任何帮助.

谢谢!

更新:有些人建议可能是由于文件的大小,但事实并非如此.在我的测试中,我添加了一个切换按钮,在使用嵌入版本和完全相同的PNG的下载版本之间切换.唯一的区别是嵌入的一个在编译期间由'pngcrush'优化.这会进行一些字节交换(从RGBA到BRGA)和alpha的预乘.(http://iphonedevelopment.blogspot.com/2008/10/iphone-optimized-pngs.html)

另外,我所指的性能不是下载,而是渲染.我在图像顶部叠加自定义绘画(覆盖UIView的drawRect方法),当背景是下载版本时它非常不连贯,当它是嵌入(因此优化)版本时非常平滑.同样,它是完全相同的文件.唯一的区别是优化,我希望我可以在运行时,在设备上,在下载之后对图像执行.

再次感谢大家的帮助!



1> Andrew Grant..:

您发布的链接几乎可以回答您的问题.

在构建过程中,XCode会预处理您的png,因此它的格式对iPhone中的图形芯片更友好.

没有像这样处理过的Png可能会使用较慢的渲染路径,一个处理非原生格式的路径,以及必须为每种颜色单独计算alpha的事实.

所以你有两个选择;

    执行与pngcrush相同的工作并交换排序/预乘alpha.加速可能是由于这些中的一个或两个.

    加载图像后,可以从中"创建"新图像.这个新图像应该是iPhone的原生格式,所以应该更快.缺点是它可能会占用更多的内存.

例如

CGRect area = CGRectMake(0, 0, width, height);
CGSize size = area.size;
UIGraphicsBeginImageContext(size);

[oldImage drawInRect:area];

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有