
我的瓶颈是UIImagePNGRepresentation.生成每256×256图像大约需要0.10-0.15秒.
我已经尝试在不同的后台队列上生成多个图块,但这只能将其缩小到大约9-10秒.
我也尝试过使用像这样的代码的ImageIO框架:
- (voID)writeCGImage:(CGImageRef)image toURL:(NSURL*)url andOptions:(CFDictionaryRef) options{ CGImageDestinationRef myImageDest = CGImageDestinationCreateWithURL((__brIDge CFURLRef)url,(__brIDge CFStringRef)@"public.png",1,nil); CGImageDestinationAddImage(myImageDest,image,options); CGImageDestinationFinalize(myImageDest); CFRelease(myImageDest);} 虽然这产生较小的PNG文件(win!),但它需要大约13秒,比以前更多2秒.
有没有办法从CGImage更快地编码PNG图像?也许使用NEON ARM扩展(iPhone 3GS)的图书馆,如libjpeg-turbo?
有没有比PNG更好的格式来保存不占用大量空间的瓷砖?
我可以想到的唯一可行的选择是将平铺尺寸增加到512 x 512.这将编码时间缩短一半.不知道该怎么做,我的滚动视图.该应用程序适用于iPad 2,仅支持iOS 6(使用iPhone 4S作为基准).
解决方法 事实证明,UIImageRepresentation表现如此糟糕的原因是因为它每次解压缩原始图像,即使我以为我正在使用CGImageCreateWithImageInRect创建一个新的图像.您可以在这里看到仪器的结果:
注意_cg_jpeg_read_scanlines和decompress_onepass.
我用强制解压缩图像:
UIImage *image = [UIImage imageWithContentsOffile:path];UIGraphicsBeginImageContext(CGSizeMake(1,1));[image drawAtPoint:CGPointZero];UIGraphicsEndImageContext();
这个时间约为0.10秒,几乎相当于每个UIImageRepresentation电话所用的时间.
互联网上有许多文章推荐绘图作为力量解压缩图像的一种方式.
有一篇关于Cocoanetics Avoiding Image Decompression Sickness的文章.本文提供了加载图像的另一种方法:
NSDictionary *dict = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:(ID)kCGImageSourceShouldCache];CGImageSourceRef source = CGImageSourceCreateWithURL((__brIDge CFURLRef)[[NSURL alloc] initfileURLWithPath:path],NulL);CGImageRef cgImage = CGImageSourceCreateImageAtIndex(source,(__brIDge CFDictionaryRef)dict);UIImage *image = [UIImage imageWithCGImage:cgImage];CGImageRelease(cgImage);CFRelease(source);
现在相同的过程大约需要3秒!使用GCD平行生成图块可以显着减少时间.
上面的writeCGImage函数大约需要5秒钟.由于文件大小较小,我怀疑zlib压缩处于较高级别.
总结以上是内存溢出为你收集整理的ios – 比UIImagePNGRepresentation更快地编码PNG吗?全部内容,希望文章能够帮你解决ios – 比UIImagePNGRepresentation更快地编码PNG吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)