Каир: размытые формы и текст

Я рисую несколько случайных прямоугольников через Каир на его поверхности изображения, масштабирование и перевод это и отображение результата с помощью

unsigned char* data = cairo_image_surface_get_data(surface);

но прямоугольники кажутся размытыми:
(Я не смог опубликовать скриншот)

Углы (вероятно) не отображаются в целочисленные координаты. Текстура, содержащая data одинакового размера и формата с surface и я уже поиграл с настройками AntiAliasing (отображение текста еще более размыто !!). Что я должен сделать, чтобы отобразить получившиеся фигуры в целочисленные координаты и улучшить качество (без использования суперсэмплинга и без удаления масштабирования-трансляции)?

Редактировать: я использовал приведенный ниже код (с третьей строкой и без нее), и она не сработала !:

cairo_save(cr);
cairo_identity_matrix(cr);
cairo_translate(cr, 0.5, 0.5);
cairo_scale(cr, size.width, size.height);
cairo_set_antialias(cr, CAIRO_ANTIALIAS_GOOD);
(make the drawing!!)
cairo_restore(cr);

Edit2: я использовал веселье. (после всех преобразований кода), но это также не сработало:

double szero1 = zero,szero2 = zero, sone1 = one, sone2 = one;
snapToPixel(cr, &szero1, &szero2);
snapToPixel(cr, &sone1, &sone2);
cairo_rectangle (cr, szero1, szero2, sone1, sone2);

0

Решение

Без предварительной обработки координаты невозможно заставить Каир привязываться к ближайшей целочисленной пиксельной координате.

void snapToPixel(cairo_t *cr, float *x, float *y) {
cairo_user_to_device (cr, x, y);
*x = round(*x);
*y = round(*y);
cairo_device_to_user (cr, x, y);
}

У ширины штриха будет та же самая проблема (+ различный в x, y если width != height).

Больше информации на http://cairographics.org/FAQ/#sharp_lines

0

Другие решения