Понимание опции kCGImageSourceSubsampleFactor в ImageIO - PullRequest
0 голосов
/ 07 февраля 2019

Я сохраняю полноразмерные изображения на диске и периодически извлекаю уменьшенные версии (которые сохраняют исходное соотношение сторон) в память, используя ImageIO.

Я смотрю на эту опцию kCGImageSourceSubsampleFactor из заголовка платформы ImageIOи пытается понять, что он делает.Комментарий в заголовке гласит: *

/ * Указывает, что, если возможно, изображение должно быть возвращено с уменьшением (по высоте и ширине) на определенный коэффициент.* Полученное изображение будет меньше и будет иметь более низкое пространственное качество, но в противном случае будет иметь те же характеристики *, что и нормальное изображение в натуральную величину.* Если указанный коэффициент масштабирования не поддерживается, будет возвращено нормальное изображение большего или полного размера.* Поддерживаемые форматы файлов: JPEG, HEIF, TIFF и PNG.* Значение этого ключа должно быть целым числом CFNumberRef (допустимые значения: 2, 4 и 8).* /

по этой ссылке я нашел обсуждение, определяющее, как ...

"CGImageSourceCreateThumbnailAtIndex () создает растровый контекст с собственным изображениемразмер независимо от subsamplingLevel, если только не передан kCGImageSourceSubsampleFactor. "

Итак ... Если желаемый эскиз составляет 1/3 размера оригинала, и я использую параметр kCGImageSourceSubsampleFactor со значениемиз 2 , я получу миниатюру того же качества при меньшем объеме памяти при обработке изображения, да?

И если бы вместо этого я использовал значение 4 , результирующее миниатюру пришлось бы увеличить, потеряв качество, да?

Итак, насколькоЯ вижу, как это работает, либо ...

1) он вытягивает полное изображение уменьшенного размера в память, затем сжимает это уменьшенное изображение до конечного размера миниатюры ... вместо того, чтобы вытягивать полноразмерное изображение впамяти, затем сжимая это в окончательный размер миниатюры. Но я не вижу, как этот метод сэкономил бы память, если бы все изображение все равно пришлось бы загружать в память, и еще один процесс выполнялся.

или моя интуиция 2) создать меньшую рабочую область растрового изображения, чтобы при загрузке полного изображения с диска оно каким-то умным трюком каким-то образом «смолкало» в меньшую область (поэтому существует только 3 возможных значения, которые могутдля ключа), экономя память без потери качества, учитывая, что конечный размер миниатюры всегда еще меньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...