gpt4 book ai didi

c - 使用 GTK/GDK 获取 Pango 渲染像素

转载 作者:行者123 更新时间:2023-12-04 07:01:04 25 4
gpt4 key购买 nike

我正在尝试使用给定的字符(在本例中为字母“T”)获取由 Pango 呈现的位图。我认为这应该有效,但它只是打印出垃圾..

在此代码中,gtk_window已经初始化为 GTK 窗口。

int width, height;
PangoLayout *layout = gtk_widget_create_pango_layout(gtk_window, "T");
PangoFontDescription *fontdesc = pango_font_description_from_string("Terminus 12");
pango_layout_set_font_description (layout, fontdesc);
pango_layout_get_pixel_size (layout, &width, &height);

GdkPixmap *temp_pixmap = gdk_pixmap_new(NULL, width, height, 24) ;
GdkGC *gc = gdk_gc_new(temp_pixmap);
gdk_draw_layout( temp_pixmap, gc, 0, 0, layout) ;

GdkColormap *cmap = gdk_colormap_get_system() ;
GdkPixbuf *temp_pixbuf = gdk_pixbuf_get_from_drawable(NULL, temp_pixmap,
cmap, 0, 0, 0, 0, width, height);

int n_channels = gdk_pixbuf_get_n_channels (temp_pixbuf);
int rowstride = gdk_pixbuf_get_rowstride(temp_pixbuf);
guchar *pixels = gdk_pixbuf_get_pixels(temp_pixbuf);

int i,j;
for (j=0; j<height; j++) {
for (i=0; i<(width*n_channels); i++) {
printf("%02x ",
*(pixels + i + j*rowstride));
}
printf("\n");
}

每次输出都不同,但举个例子:
dd 24 f8 dd 24 f8 8f 28 28 8f 28 28 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 fc 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ef 14 ce 00 00 00 d0 00 20 00 00 00 ef 02 02 d0 00 01 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 fc 00 00 00 00 00 ef 02 02 00 03 40 00 00 b9 00 00 c8
00 00 01 00 00 07 00 00 07 00 00 00 00 00 02 00 00 00 00 00 d0 00 00 c8
00 00 01 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00
00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 0e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 12 ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 7a 4e 00 00 00 01 00 00 00 00 00 00 00 00 00 01 ff ff ff ff ff ff
ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

看起来一点也不像字母“T”!

知道我做错了什么吗?谢谢!

最佳答案

好吧,我想通了。我需要正确设置颜色,并在使用 gdk_draw_rectangle 绘制之前清除该区域:

PangoLayout *layout = gtk_widget_create_pango_layout(me->gtk_window, "T");
int width, height;
PangoFontDescription *fontdesc = pango_font_description_from_string("Sans 10");
pango_layout_set_font_description (layout, fontdesc);
pango_layout_get_pixel_size (layout, &width, &height);

GdkPixmap *temp_pixmap = gdk_pixmap_new(NULL, width, height, 24);
GdkGC *gc = gdk_gc_new(temp_pixmap);

GdkColor white = {0,0xFF00,0xFF00,0xFF00};
GdkColor black = {0,0,0,0};

GdkColormap *cmap = gdk_gc_get_colormap(gc);

gdk_gc_set_rgb_fg_color(gc, &black);
gdk_gc_set_rgb_bg_color(gc, &white);
gdk_draw_rectangle(temp_pixmap, gc, TRUE, 0, 0, width, height);

gdk_gc_set_rgb_fg_color(gc, &white);
gdk_gc_set_rgb_bg_color(gc, &black);
gdk_draw_layout(temp_pixmap, gc, 0, 0, layout);

GdkPixbuf *temp_pixbuf = gdk_pixbuf_get_from_drawable(NULL, temp_pixmap,
cmap, 0, 0, 0, 0, width, height);

int n_channels = gdk_pixbuf_get_n_channels (temp_pixbuf);
int rowstride = gdk_pixbuf_get_rowstride(temp_pixbuf);
guchar *pixels = gdk_pixbuf_get_pixels(temp_pixbuf);

int i,j;
for (j=0; j<height; j++) {
for (i=0; i<(width*n_channels); i++) {
printf("%02x ",
*(pixels + i + j*rowstride));
}
printf("\n");
}

给我:
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
c5 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff e3
25 30 33 33 33 33 33 33 3d 68 ba f6 ff d8 86 4a 35 33 33 33 33 33 31 2a
00 00 00 00 00 00 00 00 0c 41 a7 f1 fe cc 66 1c 03 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 0c 41 a7 f1 fe cc 66 1c 03 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 0c 41 a7 f1 fe cc 66 1c 03 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 0c 41 a7 f1 fe cc 66 1c 03 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 0c 41 a7 f1 fe cc 66 1c 03 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 0c 41 a7 f1 fe cc 66 1c 03 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 0c 41 a7 f1 fe cc 66 1c 03 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 0c 41 a7 f1 fe cc 66 1c 03 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

关于c - 使用 GTK/GDK 获取 Pango 渲染像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1830589/

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