我正在使用具有不同单元格大小的表格视图来保存图像。由于它的大小各不相同,我有时会使用 ALAsset 全屏图像来获得比缓存缩略图更高的分辨率。但是,由于它从磁盘加载相当大的图像,因此存在明显的延迟(而缩略图几乎是即时加载的)。
有没有办法从磁盘加载特定分辨率的图像或图像的一部分(例如图像的左半部分或右半部分)?我认为整个事情需要加载到内存中,因为它通常是压缩的 jpeg,但我想我会问以防万一我没有考虑过的事情。
对于某些图像格式,这是可能的,但对于jpeg或png文件则不是真正的。您还必须自己编写,因为iOS中没有API,但是,如果您唯一关心的是短暂的延迟,则可以将加载包装到异步GCD队列中,并在加载高分辨率图像时使用缩略图。
你可以像这样从 ALAssetsLibrary 中读取原始的 jpeg 数据:
ALAssetRepresentation *rep = [self defaultRepresentation];
uint8_t *buffer = (uint8_t *) malloc(rep.size);
NSUInteger buffered = [rep getBytes:buffer fromOffset:0.0 length:rep.size error:nil];
然后,您可以使用libjpeg
并仅解码所需的矩形(向上舍入 8 像素)。请参阅jpegtran
实用程序的源代码以供参考。
线程在堆栈溢出上为 iOS 编译libjpeg
。
希望这有帮助。