c# - 如何使用 RGB 值通过黄色从红色渐变到绿色?
问题描述
我想根据 0 到 100 的值显示一种颜色。一端 (100) 是纯红色,另一端 (0) 是纯绿色。在中间(50),我希望它是黄色的。这是我的代码。它不会产生黄色。
for (int i = 0; i < img.Rows; i++)
{
for (int j = 0; j < img.Cols; j++)
{
GazeMap[i, j] = (GazeMap[i, j] - MinNumber) / (MaxNumber - MinNumber);
}
}
double red, green, blue = 0;
for (int i = 0; i < img.Rows; i++)
{
for (int j = 0; j < img.Cols; j++)
{
red = 255 * GazeMap[i, j];
green = 255 * (1 - GazeMap[i, j]);
img[i, j] = new Rgb(red, green, blue);
}
}
解决方案
您需要从 255,0,0(红色)渐变到 255,255,0(黄色),然后再渐变到 0,255,0(绿色)
我会做两个循环,第一个在图像的前半部分从红色变为黄色,另一个在另一半上从黄色变为绿色。
for (int i = 0; i < img.Rows; i++)
{
for (int j = 0; j < img.Cols / 2; j++)
{
img[i, j] = new Rgb(255, 255 * 2 * (double)j / img.Cols, 0);
}
}
for (int i = 0; i < img.Rows; i++)
{
for (int j = img.Cols / 2; j < img.Cols; j++)
{
img[i, j] = new Rgb(255 - (255 * 2 * (double)j / img.Cols), 255, 0);
}
}
请注意,您必须将 j 转换为双精度数,否则计算将四舍五入。
此外,每行计算一次颜色会更有效,而不是为每个像素计算一次。
实际上,使用图形库生成渐变画笔并使用它来填充图像会更有效。
推荐阅读
- react-native - 如何基于 git-tag 自动化 react-native ios 应用程序的内部版本号和应用程序版本?
- c# - 每次迭代删除结构列表的有效方法
- c++ - 无法找到没有 WindowName 和 ClassName 的父窗口的子窗口 #32770(对话框)
- ios - 无法选择 tableview 的单元格
- reactjs - React Native - 您当前正在使用 NODE_ENV === "production" 之外的缩小代码
- ios - dSYM 路径 im Azure Pipeline for iOS
- angular - 如何创建 Angular 9 项目?
- python - python中的方法链接导致错误
- datadog - 是否可以将现有数据(如 Prometheus 和 elk 中的数据)迁移到 datadog?
- php - PHP DOM 如何从 UL 获取项目和子项目