Перевернутый текст при рендеринге текста в Каире

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

cairo_translate( cr, x, height );
cairo_scale( cr, 1.0, -1.0 ); // FLIP the Y axis

Но когда я пытаюсь визуализировать текст (cairo_show_text), текст также инвертируется и, следовательно, не читается.

То же самое происходит при использовании масштабированного шрифта (cairo_scaled_font_t):

cairo_font_options_t *font_options;
cairo_matrix_t ctm, font_matrix;
cairo_scaled_font_t *scaled_font;font_options = cairo_font_options_create();
cairo_get_matrix( cr, &ctm );
cairo_get_font_matrix( cr, &font_matrix );

font_matrix.xx = font_matrix.yy = 20.0; // font size

// font_face initialized elsewhere and is valid

scaled_font = cairo_scaled_font_create( font_face, &font_matrix, &ctm, font_options );

cairo_set_scaled_font( cr, scaled_font );

cairo_move_to( cr, 1, 50 );

cairo_show_text( cr, "some text" );

...

Я думаю, что матрица нуждается в некоторых корректировках, но я не знаю как. Любая помощь приветствуется. Заранее спасибо.

РЕДАКТИРОВАТЬ:

Текст с ног на голову. Например, «L» выглядит как гамма, а «W» выглядит как «М».

0

Решение

Есть два способа сделать это, что я знаю:

cairo_matrix_t ms, mt, m;
cairo_matrix_init_scale(&ms, 1.0f, -1.0f);
cairo_matrix_init_translate(&mt, 0.0f, -m_height);
cairo_matrix_multiply(&m, &mt, &ms);
cairo_set_matrix(cr, &m);

или же:

cairo_scale(cr, 1.0f, -1.0f);
cairo_translate(cr, 0.0f, -m_height);

Оба решили проблему для меня. Масштабируйте cr на -1 на y, но это означает, что текст не на поверхности, поэтому переведите его на высоту поверхности, и он должен располагаться вправо.

1

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

Ну, вы переворачиваете ось Y, поэтому текст тоже переворачивается. Попробуй это:

cairo_save(cr);
cairo_reset_clip(cr);
cairo_show_text(cr, "Some Text");
cairo_restore(cr);

Вышеприведенный код заменяет вызов cairo_show_text () в вашем примере.

0

Поскольку вы переворачиваете систему координат вверх ногами, текст также отображается вверх ногами. Решение этой проблемы состоит в том, чтобы вручную перевернуть текст, установив матрицу шрифтов с отрицательной записью для вертикальной шкалы. Вы можете сделать это, изменив код для установки размера шрифта следующим образом:

double font_size = 20.0;
font_matrix.xx = font_size;
font_matrix.yy = -font_size; // negative size to vertically flip text
0
По вопросам рекламы [email protected]