gpt4 book ai didi

c++ - 开罗充满透明度

转载 作者:行者123 更新时间:2023-11-28 05:12:07 27 4
gpt4 key购买 nike

我是 Cairo 的新手,正在尝试创建具有透明颜色和描边的文本。
描边颜色的透明度有效,但文本填充颜色透明度 transparency_value 无效。如果我减少 transparency_value ,文本颜色只会变暗(黑色)并且增加 transparency_value 会使文本颜色更亮(在我的例子中是绿色)

 cairo_surface_t* surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 640, 480);
cairo_t* cairo = cairo_create(surface);
cairo_set_font_face(cairo, myfont_face);
cairo_set_font_size(cairo, 25);
cairo_text_extents_t extents;
cairo_text_extents(cairo, "Hello World", &extents);
cairo_move_to(cairo, 200, 200);
cairo_text_path(cairo, "Hello World");
double transparency_value = 0.5;
cairo_set_source_rgba(cairo, 0,1,0,transparency_value ); //transparency doesn't work
//cairo_fill(cairo); //this didn't make a difference
cairo_fill_preserve(cairo);
cairo_set_source_rgba(cairo, 0.56, 0.76, 0.96, 0.5); //transparency works
cairo_set_line_width(cairo, 1.5);
cairo_stroke(cairo);

最佳答案

会不会是您在表面之外绘制文本?在下面的示例中,我添加了对 cairo_move_to(cr, 200, 200) 的调用,现在我得到了以下结果。 (这是用 Lua 编写的,使用 https://github.com/pavouk/lgi 调用 cairo;评论指出与您的版本相比我更改的内容)

local cairo = require("lgi").cairo
local surface = cairo.ImageSurface.create(cairo.Format.ARGB32, 640, 480)
local cr = cairo.Context(surface)
local myfont_face = cr:get_font_face() -- I have to get this from somewhere
cr:move_to(200, 200) -- I added this line to make something appear
cr:set_font_face(myfont_face)
cr:set_font_size(25)
cr:text_path("Hello World")
local transparency_value = 0.5
cr:set_source_rgba(0, 1, 0, transparency_value)
-- cr:fill()
cr:fill_preserve()
cr:set_source_rgba(0.65, 0.76, 0.96, 0.5)
cr:set_line_width(5) -- changed from 1.5 to 5 to make it more prominent
cr:stroke()
surface:write_to_png("/tmp/out.png")

enter image description here

编辑:这是我将 transparency_value 更改为 0.1 时的结果。显然,结果是不同的,透明度工作正常(放大时,您仍然可以看到中间有一些淡淡的绿色)。

enter image description here

关于c++ - 开罗充满透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43299640/

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