Почему шрифты в Pango меняют вес, когда текст вращается в Каире? - PullRequest
2 голосов
/ 11 декабря 2010

У меня проблема с рендерингом Pango под повернутой матрицей.Я пытаюсь нарисовать метку (см. Код ниже), которая происходит внутри анимации вращения Каирской матрицы.

При вращении метки текст дрожит, кажется, увеличиваясь и уменьшаясь в весе, становясь самым толстым по диагоналиуглы и самые тонкие под ортогональными углами.Посмотрите это сравнение:

http://www5.picturepush.com/photo/a/4666818/640/Anonymous/pango-rotation.jpg

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

Спасибо, Шон


        //Draw text with Pango
        PangoLayout *layout;
        PangoFontDescription *desc;

        // pCr is the cairomm context ptr.
        // pCr->cobj() is the underlying C Cairo context ptr.
        pCr->set_source_rgb(0.0, 0.0, 1.0);

        layout = pango_cairo_create_layout(pCr->cobj());
        // text is the label string
        pango_layout_set_text(layout, text.c_str(), -1);

        desc = pango_font_description_from_string("Sans Bold 12");
        pango_layout_set_font_description(layout, desc);

        pango_cairo_layout_path(pCr->cobj(), layout);
        pCr->fill();

        pango_font_description_free(desc);
        g_object_unref(layout);

1 Ответ

0 голосов
/ 16 августа 2011

Я могу использовать Cairo и Pango только с Python, но не C, но мое первое предположение - возиться с ANTIALIAS:

pCr.set_antialias(cairo.ANTIALIAS_DEFAULT)

(это синтаксис для python, а не C)

Вы можете попробовать cairo.ANTIALIAS_SUBPIXEL или cairo.ANTIALIAS_NONE, чтобы увидеть, есть ли разница.

Кроме того, я не смог найти никакого поворота в вашем коде, но, возможно, вы поворачиваете текст после его рендеринга, когда сначала нужно выполнить вращение, а затем визуализировать (пикселизировать) текст (векторные контуры).

Надеюсь, это поможет.

...