缩放时开罗图像模糊

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

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

但它不起作用。

有什么办法可以解决这个问题吗?

最佳答案

这是因为图片是按比例放大的。不是直接设置源表面,而是使用 cairo_pattern_create_for_surface() 从表面创建一个图案,对其调用 cairo_pattern_set_filter() 以设置缩放模式,然后调用 cairo_set_source() 加载模式。有关缩放模式,请参阅 cairo_filter_t 的文档。 CAIRO_FILTER_NEAREST,例如,将为您提供正常的像素缩放,没有模糊或其他转换。

关于缩放时开罗图像模糊,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36439504/

相关文章:

c++ - Cario 的文本区域 :OpenGL

cairo - 如何子类化 Clutter.Actor(涉及 Cairo/Clutter.Canvas)

c - 如何将主函数中的反向字符串函数转换为自己的独立函数?

c - 可以在静态全局区域中声明大型结构对象吗?

C sscanf() 强制数字输入

c - 对 `gdk_color_parse' 的 undefined reference

gtk - 如何在 Cairo 表面(内部)上显示 Gtk Widget?

将 PCM 16 位 LE 转换为 WAV

c - 为 GTK-4.0 设置 Eclipse

c - 在 Gtk+2.0 应用程序中使用 pthreads 的安全性