gpt4 book ai didi

c++ - 在开罗渲染文本时倒置文本

转载 作者:行者123 更新时间:2023-11-28 03:20:14 25 4
gpt4 key购买 nike

我正在使用 Cairo 编写一个程序,我需要使用以下代码将坐标从屏幕坐标更改为笛卡尔坐标:

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”看起来像 Gamma,而“W”看起来像“M”。

最佳答案

我知道有两种方法可以做到这一点:

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);

两者都为我解决了问题。按 y 上的 -1 缩放 cr,但这意味着文本在表面之外,因此按表面的 -height 平移,它应该就位。

关于c++ - 在开罗渲染文本时倒置文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15663624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com