Я рисую несколько случайных прямоугольников через Каир на его поверхности изображения, масштабирование и перевод это и отображение результата с помощью
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);
Без предварительной обработки координаты невозможно заставить Каир привязываться к ближайшей целочисленной пиксельной координате.
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