gpt4 book ai didi

c - 从文件加载字体到 pango?

转载 作者:太空狗 更新时间:2023-10-29 14:59:34 30 4
gpt4 key购买 nike

我有一个代码使用CairoPango创建图像:

#include<stdio.h>
#include<cairo.h>
#include<pango/pangocairo.h>

#define IMAGE_WIDTH 650
#define IMAGE_HEIGHT 150

#define TEXT "HELLO WORLD"
#define FONT "MizuFontAlphabet Normal 40"

/*
* $ gcc $(pkg-config pangocairo cairo --cflags --libs) file.c
*/


int main(int argc , char** argv) {

cairo_surface_t *surface;
cairo_t *cr;

PangoLayout *layout;
PangoFontDescription *desc;
PangoRectangle extents;

surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, IMAGE_WIDTH, IMAGE_HEIGHT);
cr = cairo_create(surface);

cairo_rectangle(cr, 0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);
cairo_set_source_rgb(cr, 0, 0, 0);
cairo_fill(cr);
cairo_stroke(cr);

/* the font is needed to be installed in fonts directory */
layout = pango_cairo_create_layout(cr);
pango_layout_set_text(layout, TEXT, -1);
desc = pango_font_description_from_string(FONT);
pango_layout_set_font_description(layout, desc);
pango_font_description_free (desc);

pango_layout_get_pixel_extents(layout, NULL, &extents);
int x = (int) (IMAGE_WIDTH - extents.width) / 2;
int y = (int) (IMAGE_HEIGHT - extents.height) / 2;

cairo_set_source_rgb(cr, 0.33, 0.55, 0.88);
cairo_move_to(cr, x, y);
pango_cairo_show_layout(cr, layout);

g_object_unref(layout);

cairo_surface_write_to_png(surface, "image.png");

cairo_destroy(cr);
cairo_surface_destroy(surface);

return(0);
}

我使用的字体 MizuFontAlphabet 是一种非标准字体,因此需要将其安装在字体目录中,以便我可以在 Pango 中使用它:

    desc    = pango_font_description_from_string(FONT);

如果未安装字体,我如何从文件加载字体?

最佳答案

通过向本地 fontconfig 状态添加自定义字体可以很容易地解决此问题:

#include <fontconfig/fontconfig.h>


std::string yourFontFilePath = "/home/testUser/bla.ttf";
const FcChar8 * file = (const FcChar8 *)yourFontFilePath.c_str();
FcBool fontAddStatus = FcConfigAppFontAddFile(FcConfigGetCurrent(), file);

现在 pango 渲染引擎将通过使用 PangoFontDescription 使用您的自定义字体。

关于c - 从文件加载字体到 pango?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10722577/

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