ImageQuality with CGContextSetInterpolationQuality

落花浮王杯 提交于 2019-12-09 13:25:01

问题


How effective is the CGContextSetInterpolationQuality method in Quartz?

Does it affect the quality of the image? If so, to what extent?

I can't see any difference between the interpolated and the non-interpolated image.


回答1:


Although this is a bit of an old question, I have recently done some benchmarking about the effects of CGContextSetInterpolationQuality and thought that its outcomes might be of interest to someone else.

In my benchmark test, I draw a set of 6 different 649x649 b&w bitmap images to build a set of 12 different jigsaw puzzle tiles. The bitmap images are scaled down by a factor of 5.0 (i.e., to 129.8x129.8) to make them fit on a 320x480 display (at retina display scale).

Run times on a 4th gen iPod touch, as reported by Instruments, are the following:

  • kCGInterpolationLow: 969 msec

  • kCGInterpolationMedium: 1690 msec

  • kCGInterpolationHigh: 2694 msec

  • kCGInterpolationNone: 545 msec

As to the visual outcome, if you compare High or Medium to Low or None, the difference is staggering. Even noticeable, IMO, the difference between None and Low; while the difference between High and Medium is not particularly noticeable in this particular test. What is clear is the difference in run times, so that in my particular case, I ended up using kCGInterpolationMedium.

kCGInterpolationNone

kCGInterpolationLow

kCGInterpolationMedium

kCGInterpolationHigh




回答2:


The method

void CGContextSetInterpolationQuality ( CGContextRef c, CGInterpolationQuality quality );

affect the way Quartz renders an image into a CGContext. This e.g. comes into play when the source image is larger or smaller than the target bitmap CGContext.

To exactly answer your question of why you don't see any noticable difference, I will need more details about the exact usage, image sizes, context types, etc.

Exactly what interpolation methods the different quality levels cover seems undocumented. A guess from my side would however be:

  • Low: Nearest neighbor interpolation
  • Medium: Linear or bilinear interpolation
  • High: Quadratic or bicubic interpolation

Regards



来源:https://stackoverflow.com/questions/5685884/imagequality-with-cgcontextsetinterpolationquality

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!