ios – 比UIImagePNGRepresentation更快地编码PNG吗?

ios – 比UIImagePNGRepresentation更快地编码PNG吗?,第1张

概述我正在为CATiledLayer生成一堆tile.在iPhone 4S上,以256 x 256的四层细节生成120张拼图大概需要11秒钟.图像本身适合2048 x 2048. 我的瓶颈是UIImagePNGRepresentation.生成每256×256图像大约需要0.10-0.15秒. 我已经尝试在不同的后台队列上生成多个图块,但这只能将其缩小到大约9-10秒. 我也尝试过使用像这样的代码的I 我正在为CATiledLayer生成一堆tile.在iPhone 4S上,以256 x 256的四层细节生成120张拼图大概需要11秒钟.图像本身适合2048 x 2048.

我的瓶颈是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吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1109799.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存