如何插入 HSV 颜色?
How to interpolate a HSV color?
我正在 win32 api 中创建一个应用程序,它将使用进度条。这个进度条,应该改变它的颜色。从红色(左端)到绿色(右端),中间有一些黄色。
我搜索了一下,发现我应该使用 HSV 来实现这一点。我只是不知道怎么办?我在 this link 中找到了两个函数,用于将颜色从 RGB 转换为 HSV,然后再转换回来。
但是颜色已经转换成HSV了怎么办?
与 RGB
坐标一样,HSV
坐标在三维 space 中定义一个点。
您可能会找到一个 轨迹 从一个点(x0,一种颜色)到第二个(x1),公式如下:
x = x0 + alpha * (x1-x0)
alpha 的变化形式为 0.0 到 1.0
您可以同时对所有三个组件执行此操作。
使用 HSV 轨迹 从绿色到红色 space 您将主要修改 H(色调)值。如果你想在你的路径中间看到一些黄色(而不是紫罗兰色),你需要定义第二种甚至第三种颜色然后走
green -> yellow -> red
编辑:示例
int hue0 = 0; // red
int hue2 = 120; // green
// find 100 colors between red and green
for(double alpha = 0; alpha <= 1.0; alpha += 0.01)
{
hueX = hue0 + alpha * (hue1 - hue0);
// same for value, saturation:
// valX = val0 + alpha * (val1 - val0)
// ...
// plot this color
}
我正在 win32 api 中创建一个应用程序,它将使用进度条。这个进度条,应该改变它的颜色。从红色(左端)到绿色(右端),中间有一些黄色。
我搜索了一下,发现我应该使用 HSV 来实现这一点。我只是不知道怎么办?我在 this link 中找到了两个函数,用于将颜色从 RGB 转换为 HSV,然后再转换回来。
但是颜色已经转换成HSV了怎么办?
与 RGB
坐标一样,HSV
坐标在三维 space 中定义一个点。
您可能会找到一个 轨迹 从一个点(x0,一种颜色)到第二个(x1),公式如下:
x = x0 + alpha * (x1-x0)
alpha 的变化形式为 0.0 到 1.0
您可以同时对所有三个组件执行此操作。
使用 HSV 轨迹 从绿色到红色 space 您将主要修改 H(色调)值。如果你想在你的路径中间看到一些黄色(而不是紫罗兰色),你需要定义第二种甚至第三种颜色然后走
green -> yellow -> red
编辑:示例
int hue0 = 0; // red
int hue2 = 120; // green
// find 100 colors between red and green
for(double alpha = 0; alpha <= 1.0; alpha += 0.01)
{
hueX = hue0 + alpha * (hue1 - hue0);
// same for value, saturation:
// valX = val0 + alpha * (val1 - val0)
// ...
// plot this color
}