C 缩放时开罗图像模糊

C 缩放时开罗图像模糊,c,gtk,cairo,C,Gtk,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); 及 q、 png是5x5图像: 但当程序运行时,图像会稍微模糊: 我已经试过了 cairo_set_antialias(cr, CAIRO_ANTIA

我有以下开罗代码:

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);

q、 png是5x5图像:

但当程序运行时,图像会稍微模糊:

我已经试过了

cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE);
但它不起作用


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

这是因为图像是如何放大的。与其直接设置源曲面,不如使用
cairo\u pattern\u create\u for\u surface()
从曲面创建图案,在其上调用
cairo\u pattern\u set\u filter()
设置缩放模式,然后调用
cairo\u set\u source()
加载图案。有关缩放模式,请参阅
cairo\u filter\t
的文档<例如,code>CAIRO\u FILTER\u NEAREST将为您提供正常的像素缩放,而不会出现模糊或其他变换。

这是因为图像是如何放大的。与其直接设置源曲面,不如使用
cairo\u pattern\u create\u for\u surface()
从曲面创建图案,在其上调用
cairo\u pattern\u set\u filter()
设置缩放模式,然后调用
cairo\u set\u source()
加载图案。有关缩放模式,请参阅
cairo\u filter\t
的文档<例如,code>CAIRO\u FILTER\u NEAREST将为您提供正常的像素缩放,而不会出现模糊或其他变换。使用
CAIRO\u FILTER\u NEAREST
是有效的。非常感谢。
cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE);