ImageQuality с CGContextSetInterpolationQuality

Насколько эффективен метод CGContextSetInterpolationQuality в Quartz?

Влияет ли это на качество изображения? Если да, то в какой степени?

Я не вижу никакой разницы между интерполированным и неинтерполированным изображением.


person Hisenberg    schedule 16.04.2011    source источник


Ответы (2)


Хотя это немного старый вопрос, я недавно провел сравнительный анализ эффектов CGContextSetInterpolationQuality и подумал, что его результаты могут быть интересны кому-то еще.

В своем тестовом тесте я нарисовал набор из 6 различных черно-белых растровых изображений 649x649, чтобы создать набор из 12 различных фрагментов головоломки. Растровые изображения уменьшены в 5,0 раз (т. е. до 129,8x129,8), чтобы они поместились на дисплее с разрешением 320x480 (в масштабе дисплея Retina).

Время работы на iPod touch 4-го поколения, по данным Instruments, следующее:

  • kCGInterpolationLow: 969 мс

  • kCGInterpolationMedium: 1690 мс

  • kCGInterpolationHigh: 2694 мс

  • kCGInterpolationNone: 545 мс

Что касается визуального результата, если вы сравните High или Medium с Low или None, разница будет ошеломляющей. Даже заметна, ИМО, разница между None и Low; в то время как разница между High и Medium не особо заметна в этом конкретном тесте. Что ясно, так это разница во времени выполнения, поэтому в моем конкретном случае я использовал kCGInterpolationMedium.

kCGInterpolationNone

введите здесь описание изображения

kCGInterpolationLow

введите здесь описание изображения

kCGInterpolationMedium

введите здесь описание изображения

kCGInterpolationHigh

введите здесь описание изображения

person sergio    schedule 03.03.2013
comment
В итоге я использовал kCGInterpolationHigh для журнала. Спасибо за объяснение. - person Hisenberg; 04.03.2013

Метод

void CGContextSetInterpolationQuality ( CGContextRef c, CGInterpolationQuality quality );

влияют на то, как Quartz визуализирует изображение в CGContext. Это например. вступает в игру, когда исходное изображение больше или меньше целевого растрового изображения CGContext.

Чтобы точно ответить на ваш вопрос о том, почему вы не видите заметной разницы, мне потребуется больше подробностей о точном использовании, размерах изображений, типах контекста и т. д.

Какие именно методы интерполяции охватывают разные уровни качества, кажется недокументированным. Однако предположение с моей стороны было бы таким:

  • Низкий: интерполяция ближайшего соседа
  • Среда: линейная или билинейная интерполяция
  • Высокий: квадратичная или бикубическая интерполяция

С уважением

person KlausCPH    schedule 30.07.2011
comment
но что такое kCGInterpolationNone? Я думаю, это должен быть ближайший сосед - person zxcat; 26.05.2013