开罗渐变图案不使用设置颜色
Cairo gradient pattern not using set colors
我一直在尝试使用以下代码来设置渐变,但它显示了从黑色到白色的渐变(显然不是颜色(。
cairo_t *cr;
cr = gdk_cairo_create(widget->window);
cairo_pattern_t *pat1;
pat1 = cairo_pattern_create_linear(0.0, 0.0, 50.0, 512);
cairo_pattern_add_color_stop_rgb(pat1, 0, 0, 0, 0);
cairo_pattern_add_color_stop_rgb(pat1, 1, 1, 254, 255);
cairo_pattern_add_color_stop_rgb(pat1, 2, 2, 253, 255);
cairo_pattern_add_color_stop_rgb(pat1, 3, 3, 252, 255);
cairo_pattern_add_color_stop_rgb(pat1, 4, 4, 251, 255);
cairo_pattern_add_color_stop_rgb(pat1, 5, 5, 250, 255);
cairo_pattern_add_color_stop_rgb(pat1, 6, 6, 249, 255);
cairo_pattern_add_color_stop_rgb(pat1, 7, 6, 249, 255);
cairo_pattern_add_color_stop_rgb(pat1, 8, 7, 248, 255);
cairo_pattern_add_color_stop_rgb(pat1, 9, 8, 247, 255);
cairo_rectangle(cr, 0, 0, 50, 512);
cairo_set_source(cr, pat1);
cairo_fill(cr);
cairo_pattern_destroy(pat1);
cairo_destroy(cr);
但是,此代码显示从红色到紫色再到蓝色的渐变:
cairo_t *cr;
cr = gdk_cairo_create(widget->window);
cairo_pattern_t *pat1;
pat1 = cairo_pattern_create_linear(0.0, 0.0, 50.0, 512);
cairo_pattern_add_color_stop_rgb(pat1, 0, 256, 0, 0);
cairo_pattern_add_color_stop_rgb(pat1, 1, 0, 0, 256);
cairo_pattern_add_color_stop_rgb(pat1, 2, 0, 256, 256);
cairo_rectangle(cr, 0, 0, 50, 512);
cairo_set_source(cr, pat1);
cairo_fill(cr);
cairo_pattern_destroy(pat1);
cairo_destroy(cr);
为什么第一个显示灰度,而第二个没有?顶部有非灰度颜色,所以我不知道为什么它不起作用。
编辑:一个答案解释说,大于 1 的值被固定,所以我将我的代码更改为:
cairo_pattern_add_color_stop_rgb(pat1, 0, 0, 0, 0);
cairo_pattern_add_color_stop_rgb(pat1, 1, (1/256), (254/256), (255/256));
cairo_pattern_add_color_stop_rgb(pat1, 2, (2/256), (253/256), (255/256));
cairo_pattern_add_color_stop_rgb(pat1, 3, (3/256), (252/256), (255/256));
cairo_pattern_add_color_stop_rgb(pat1, 4, (4/256), (251/256), (255/256));
cairo_pattern_add_color_stop_rgb(pat1, 5, (5/256), (250/256), (255/256));
cairo_pattern_add_color_stop_rgb(pat1, 6, (6/256), (249/256), (255/256));
cairo_pattern_add_color_stop_rgb(pat1, 7, (6/256), (249/256), (255/256));
cairo_pattern_add_color_stop_rgb(pat1, 8, (7/256), (248/256), (255/256));
cairo_pattern_add_color_stop_rgb(pat1, 9, (8/256), (247/256), (255/256));
酒吧现在完全是黑色的。
https://www.cairographics.org/manual/cairo-cairo-t.html#cairo-set-source-rgb
颜色和 alpha 分量是 0 到 1 范围内的浮点数。如果传入的值超出该范围,它们将被钳制。
工作的 256 被钳制为 1。 所以你得到 (1,0,0( 到 (0,0,1( 到 (0,1,1(。
在不起作用的那个中,第一个停止保持 (0,0,0(,每隔一个停止被钳制到 (1,1,1(。 简而言之,黑色到白色是第一个中使用的颜色。 所以开罗显示黑色到白色。
相关文章:
- 如何在24位SDL_Surface上设置像素的颜色
- 设置QTabWidget中各个选项卡的颜色
- 如何仅设置 QTabWidget 背景颜色样式表
- 为什么不能使用 setData() 在 QTreeView 中设置单元格的背景颜色?
- 开罗渐变图案不使用设置颜色
- 在加载页面时,如何为iwebbrowser2设置背景颜色
- Delphi / C 构建器 - 在TDBGrid中设置活动 /选择的行颜色
- 如何设置按钮的背景颜色,包括复选框按钮
- 设置子窗口的文本颜色
- wx颜色设置与整数数组
- 颜色设置在碎片着色器中,未显示GLSL 1.30
- 是否可以设置卷轴的颜色
- 设置 HWND TXT 颜色
- 我如何将特定字符设置为多维数组中的不同颜色
- 如何在wxtreelistctrl中设置文本背景颜色
- 如何在视觉工作室 2012年设置函数输入参数的颜色
- 如何在GDAL输出文件中设置分类颜色
- 是否有可以在控制台中设置颜色的 WinAPI 调用,如'color xx'命令?
- QQml_colorProvider:未设置颜色提供程序
- SDL_GL_SetAttribute不设置颜色大小