1

我正在使用具有不同单元格大小的表格视图来保存图像。由于它的大小不同,我有时使用 ALAsset fullScreenImage 来获得比缓存缩略图更高的分辨率。但是,由于它是从磁盘加载一个相当大的图像,因此存在明显的延迟(而缩略图几乎是瞬间加载的)。

有没有办法从磁盘加载特定分辨率的图像或图像的一部分(例如左半部分或右半部分)?我认为整个东西都需要加载到内存中,因为它通常是压缩的 jpeg,但我想我会问,以防有什么我没有考虑过。

4

2 回答 2

0

这对于某些图像格式是可能的,但对于 jpeg 或 png 文件来说并非如此。您还必须自己编写它,因为在 iOS 中没有用于此的 API,但是,如果您唯一关心的是短暂的延迟,您可以将加载包装到异步 GCD 队列中并在高分辨率图像时使用缩略图加载。

于 2012-12-12T23:57:28.733 回答
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上有一些关于libjpeg为iOS编译的线程。

希望这可以帮助。

于 2013-04-24T12:23:37.990 回答