je le code cairo suivant:l'image du Caire floue lorsque l'échelle
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);
Et
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);
}
Mais quand le programme est exécuté , l'image est légèrement floue:
J'ai déjà essayé
cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE);
mais il ne fonctionne pas.
Y at-il un moyen de résoudre ce problème?
Ceci est dû à la façon dont l'image est mise à l'échelle. Au lieu de définir directement une surface source, créez un motif sur la surface avec 'cairo_pattern_create_for_surface()', appelez cairo_pattern_set_filter() 'pour définir le mode de mise à l'échelle, puis appelez cairo_set_source()' pour charger le motif. Voir la documentation de 'cairo_filter_t' pour les modes de mise à l'échelle. 'CAIRO_FILTER_NEAREST', par exemple, vous donnera un zoom normal de pixel sans flou ou autres transformations. – andlabs
L'utilisation de 'CAIRO_FILTER_NEAREST' a fonctionné. Je vous remercie. –