缩放时开罗图像模糊

时间:2016-04-06 00:41:48

标签: c gtk cairo

我有以下cairo代码:

cairo_set_source_rgba(cr, 1, 1, 1, 1);
cairo_rectangle(cr, 0, 0, WINDOW_SIZE, WINDOW_SIZE);
cairo_fill(cr);
cairo_scale(cr, 8, 8);
draw_image(cr, "q.png", 5, 5);

void draw_image(cairo_t* cr, char* img_name, int x, int y)
{
    cairo_translate(cr, x, y);
    cairo_surface_t* img = cairo_image_surface_create_from_png(img_name);
    cairo_set_source_surface(cr, img, 0, 0);
    cairo_paint(cr);
    cairo_translate(cr, -x, -y);
}

q.png是5x5图片: enter image description here

但是当程序运行时,图像会略微模糊:
enter image description here

我已经尝试了

cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE);

但它不起作用。

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:4)

这是因为图像放大的方式。不是直接设置源曲面,而是使用cairo_pattern_create_for_surface()在曲面外创建一个模式,在其上调用cairo_pattern_set_filter()来设置缩放模式,然后调用cairo_set_source()来加载模式。有关缩放模式,请参阅cairo_filter_t的文档。例如,CAIRO_FILTER_NEAREST会为您提供正常的像素缩放,不会出现模糊或其他变换。