0

UITableView 中显示了许多图像(600 宽,固定高度),我想实现类似于 instagram 的视觉效果,如下所示:

  1. 平滑滚动

  2. 图像滚动回屏幕时没有“空白到图像”效果

  3. 最低的内存成本

我正在使用 SDWebImage 来执行此操作,但是当 SDWebImage 下载图像时,它会将解压缩的图像数据缓存在内存中,这样可以快速显示多次但会占用大量内存,当应用程序收到内存不足警告时 SDImageCache 将刷新所有缓存的图像,当显示图像滚动回屏幕时,我们得到“空白到图像”。

并且我修改了一些代码来实现缓存压缩图像而不是缓存解压缩图像,但是新的问题来了:图像解压太慢,这次虽然我们没有得到“空白到图像”,但是每当显示图像时滚动就会延迟。

最后,我发现延迟是由JPEG解压缩引起的,所以我认为我需要使用GPU解压缩JPEG。但我不知道该怎么做,或者
以这种方式优化是完全错误的。有人可以提供帮助吗?

4

2 回答 2

1

我也不知道你试过什么。但是根据我之前的项目。我是这样做的:首先使用延迟加载机制(您可以看到LazyTableImages演示:https ://github.com/taufikobet/Fast-LazyTableImages )。仅下载或加载可见图像。您必须使用另一个线程下载图像

第二个用合适的尺寸存储图片,你可以处理图片的尺寸和存储图片使用另一个线程不要在主线程中,一个合适尺寸的图片会为你加载图片节省很多时间,如果你存储大小不合适,当你加载图片时,imageView会处理图片的大小。

当你存储JPEG时,如果你想压缩你可以使用下面的方法。

UIKIT_EXTERN NSData *UIImageJPEGRepresentation(UIImage *image, CGFloat compressionQuality);  // return image as JPEG. May return nil if image has no CGImageRef or invalid bitmap format. compression is 0(most)..1(least)

这只是我的经验。

于 2013-01-30T08:36:47.247 回答
0

我最近经常处理大图像(2000*1000),所以我做了很多研究。

首先,您可以了解有关快速解码 jpeg 文件的第三部分库的一些信息:libjpeg-turbo。一个使用这个库的例子:link Github

以下是解压缩/渲染图像问题的一些信息:检查链接1 链接2

于 2013-01-30T13:13:44.057 回答