在升级模式时,cairo 默认使用双线性插值,这看起来应该是合理的。但是,当缩小比例时,cairo 当前(从 1.12.14 开始)没有正确的抗锯齿模式。没有办法做到这一点,除非实际将该功能添加到 cairo 本身,但请参阅下面的潜在解决方法。
cairo 中的“antialias”设置控制光栅化形状和文本的抗锯齿,而不是图案。控制模式抗锯齿的设置称为“cairo_pattern_set_filter”,具有以下值:
CAIRO_FILTER_FAST, // usually the same as NEAREST
CAIRO_FILTER_GOOD, // usually the same as BILINEAR
CAIRO_FILTER_BEST, // usually the same as BILINEAR
CAIRO_FILTER_NEAREST, // for upscaling, this is pixel-replication
CAIRO_FILTER_BILINEAR, // for upscaling, this is linear interpolation
CAIRO_FILTER_GAUSSIAN // not implemented, should not be used
但如前所述,它们都不适用于缩小规模。
一些人使用的解决方法是以 2 为单位缩小图像。也就是说,将图像在两个维度上都缩小到一半,直到它大致达到所需的大小。然后可以将此缩小的图像与缩小小于 2 的修改变换一起使用。