我正在使用具有不同单元格大小的表视图来保存图像。由于它的大小不同,我有时会使用ALAsset fullScreenImage来获得比缓存缩略图更高的分辨率。但是,由于它从磁盘加载了相当大的图像,因此存在明显的延迟(而缩略图几乎瞬间加载)。
有没有办法从磁盘加载特定分辨率图像或图像的一部分(例如左半部分或右半部分)?我认为整个事情都需要加载到内存中,因为它通常是一个压缩的jpeg,但我想如果有一些我没有考虑过的话我会问。
答案 0 :(得分:0)
对于某些图像格式,这是可能的,但对于jpeg或png文件则不然。您还必须自己编写,因为在iOS中没有此API,但是,如果您唯一关心的是短暂延迟,则可以将加载包装到异步GCD队列中并使用缩略图,而更高分辨率的图像是负荷。
答案 1 :(得分:0)
您可以从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
实用程序的来源以供参考。
在stackoverflow上为iOS编译libjpeg
时有一些线程。
希望这有帮助。