gpt4 book ai didi

c - 如何将灰度开罗表面写成 PNG

转载 作者:太空宇宙 更新时间:2023-11-03 23:51:14 25 4
gpt4 key购买 nike

我有一个格式为 CAIRO_FORMAT_A8cairo_surface_t。我想将 surfe 写成灰度图像,因此每个像素都有一个 uchar 类型的字节值。

如果我直接在 CAIRO_FORMAT_A8 表面上使用 cairo_surface_write_to_png,我得到的只是全黑图像。我认为这就是 cairo 在内部对待 A8 表面的方式——作为 alpha 值,而不是灰度数据。不过,我想要一张灰度图像。

如果有人能指出如何将 A8 格式复制到 RGB24 图像的所有 3 层,我就足够了。

感谢任何帮助!

最佳答案

下面未经测试的代码。这个想法是创建一个 ARGB 表面并通过 cairo_mask_surface() 在那里“复制”A8 表面。如果颜色被“交换”,则交换两个 cairo_set_source_rgb() 调用。

cairo_surface_t *s = YOUR_A8_SURFACE;
cairo_t *cr = cairo_create(s);
cairo_push_group_with_content(cr, CAIRO_CONTENT_COLOR_ALPHA);
cairo_set_source_rgb(cr, 1, 1, 1);
cairo_paint(cr);
cairo_set_source_rgb(cr, 0, 0, 0);
cairo_mask_surface(cr, cairo_get_target(cr), 0, 0);
cairo_surface_write_to_png(cairo_get_group_target(cr), "/tmp/foo.png");
/* If you want to continue using the context:
cairo_pattern_destroy(cairo_pop_group(cr)); */
cairo_destroy(cr);

关于c - 如何将灰度开罗表面写成 PNG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19524506/

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