我正在使用具有不同单元格大小的表格视图来保存图像。由于它的大小不同,我有时使用 ALAsset fullScreenImage 来获得比缓存缩略图更高的分辨率。但是,由于它是从磁盘加载一个相当大的图像,因此存在明显的延迟(而缩略图几乎是瞬间加载的)。
有没有办法从磁盘加载特定分辨率的图像或图像的一部分(例如左半部分或右半部分)?我认为整个东西都需要加载到内存中,因为它通常是压缩的 jpeg,但我想我会问,以防有什么我没有考虑过。
我正在使用具有不同单元格大小的表格视图来保存图像。由于它的大小不同,我有时使用 ALAsset fullScreenImage 来获得比缓存缩略图更高的分辨率。但是,由于它是从磁盘加载一个相当大的图像,因此存在明显的延迟(而缩略图几乎是瞬间加载的)。
有没有办法从磁盘加载特定分辨率的图像或图像的一部分(例如左半部分或右半部分)?我认为整个东西都需要加载到内存中,因为它通常是压缩的 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
供参考。
在stackoverflow上有一些关于libjpeg
为iOS编译的线程。
希望这可以帮助。