When drawing RGBA images, e.g. using
gr_drawimage(), the resolution of the image data and the size of the area where the image should be drawn often don’t match. In workstation types which produce vector-based files, this issue is left to viewing programs, which will need to rasterize the file to display it. For raster output like PNGs, GKS has to handle this resolution mismatch itself.
Before GR Runtime version 0.42.0, image data would always be resampled to the required resolution using the nearest neighbor algorithm, which is very fast but can lead to a few issues, particularly when reducing the resolution of image data, as the information of some pixels will be ignored and lost to the viewer. To avoid this and offer alternatives, GKS now supports two other algorithms: linear and Lanczos resampling.
The algorithm to be used can be set individually for four cases:
- downsampling horizontally,
- downsampling vertically,
- upsampling horizontally, and
- upsampling vertically.
To do so, the user can combine flags for each situation, e.g.
GKS_K_DOWNSAMPLE_HORIZONTAL_LINEAR | GKS_K_DOWNSAMPLE_VERTICAL_LINEAR and pass the result to
gr_setresamplemethod(). Alternatively, they can use a pre-combined flag such as
If no resampling method is selected, the default resampling method will be used. Usually, this will be the nearest neighbor algorithm, but this can be changed using the
GKS_DEFAULT_RESAMPLE_METHOD environment variable.
Using linear or Lanczos resampling will be significantly slower than the nearest neighbor approach.
The following example shows a 500×500 pixels image downsampled to 100×100 pixels using these three algorithms:
The next example shows the reverse, a 100×100 pixels image upsampled to 500×500 pixels: