У меня есть простая программа Cairo, которая пытается нарисовать диагональ, состоящую из точек в формате PNG 600x600. Однако вывод кажется усеченным всякий раз, когда я пытаюсь отобразить все точки с помощью одного вызова cairo_stroke().
В частности, рассмотрим следующую программу:
#include <cairo/cairo.h>
int main(int argc, char **argv)
{
cairo_surface_t *surface =
cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 300, 300);
cairo_t *cr = cairo_create(surface);
cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND);
cairo_set_source_rgb(cr, 0, 0, 0);
cairo_set_line_width(cr, 5);
for (double x = 0.0; x <= 300; x += 10) {
cairo_move_to(cr, x, x);
cairo_close_path(cr);
cairo_stroke(cr);
}
cairo_surface_write_to_png(surface, "output.png");
cairo_destroy(cr);
cairo_surface_destroy(surface);
return 0;
}
который генерирует следующий правильный вывод:
Если я передвину
cairo_stroke(cr);
вне цикла for, вместо этого генерируется следующий неверный вывод:
.
Может кто-нибудь еще объяснить, почему вторая попытка не удалась? Я подозреваю, что я должен делать что-то не так здесь...
cairo_close_path(cr)
наcairo_line_to(cr, x, x)
кажется вполне приемлемой. - person cbd   schedule 23.02.2012