我将完整大小的图像存储在磁盘上,并使用ImageIO定期将缩小的版本(保持原始宽高比)拉入内存。
我正在从ImageIO框架标题中查看此选项kCGImageSourceSubsampleFactor
,并试图了解它的作用。标头中的评论说...
/ *指定在可能的情况下应按比例返回图像 下降(在高度和宽度上)指定的因子。 * 所结果的 图像会更小并降低空间质量,但会 否则具有与原尺寸相同的特征* 图片。 *如果不支持指定的比例因子,则增大 否则将返回原尺寸的正常图像。 *支持的文件格式 是JPEG,HEIF,TIFF和PNG。 *此键的值必须为 整数CFNumberRef(允许的值:2、4和8)。 * /
at this link我发现了一个讨论,具体说明了...
“ CGImageSourceCreateThumbnailAtIndex()创建具有以下内容的位图上下文 图像的原始大小,与subsamplingLevel无关,除非 kCGImageSourceSubsampleFactor被传递。”
所以...如果我想要的缩略图是原始缩略图大小的1/3,并且我使用的值为{strong> 2 的kCGImageSourceSubsampleFactor
选项,我最终会得到相同质量的缩略图,同时在图像处理过程中使用更少的内存,是吗?
如果我改为使用 4 值,则结果缩略图必须放大,从而失去质量,是吗?
据我所知,它的工作方式是...
1)它将缩小尺寸的完整图像拉入内存,然后将缩小图像的尺寸缩小到最终的缩略图大小...而不是将放大后的图像缩小到内存中,然后将其缩小到最终的缩略图大小。 但是我不知道如果仍然必须将完整映像加载到内存中并执行另一个进程,这种方法将如何节省内存。
或我的内心世界 2)创建一个较小的工作位图区域,以便从磁盘加载完整图像时,通过某种巧妙的技巧,它会以某种方式“变乱”进入较小的区域(因此(为什么只能为该键提供3个可能的值),考虑到最终缩略图的大小总是较小,因此可以免费保存内存,而不会降低质量。