C# 简单的蓝到红范围功能
我基本上画了一条代表水流的线。我想给用户一个近似的水温,把它从100%的蓝色染成100%的红色。 我想;很简单,我两分钟就做完了。。 两个小时后,我看到了非常先进的色彩系统,而我所需要的只是一些非常简单的东西 我正在制作一个WinForm并使用系统。用钢笔绘图:C# 简单的蓝到红范围功能,c#,C#,我基本上画了一条代表水流的线。我想给用户一个近似的水温,把它从100%的蓝色染成100%的红色。 我想;很简单,我两分钟就做完了。。 两个小时后,我看到了非常先进的色彩系统,而我所需要的只是一些非常简单的东西 我正在制作一个WinForm并使用系统。用钢笔绘图: Pen Pen1 = new Pen(Color.FromArgb(0, 0, 0, 0), 2); 我希望用这个输出Color类似的东西来创建一个输入(双精度)从-1到1的函数 Public Color TemperatureRan
Pen Pen1 = new Pen(Color.FromArgb(0, 0, 0, 0), 2);
我希望用这个输出Color
类似的东西来创建一个输入(双精度)从-1到1的函数
Public Color TemperatureRange(double BlueToRed)
{
Color MyColor = new Color();
byte a, r, g, b;
//Insert math function that take from -1 to 1 and
//produces and argb-output ranging from blue to red
MyColor = Color.FromArgb(a, r, g, b);
return MyColor;
}
以下是一种简单的线性RGB缩放方法:
public Color TemperatureRange(double value)
{
// start = blue = #0000FF
// end = red = #FF0000
// range [-1; 1]
var r = (int)(0xff * (value + 1) / 2);
var g = 0;
var b = (int)(0xff * (1 - value) / 2);
return Color.FromArgb(r, g, b);
}
在中间,它将产生Color.Purple
(#800080)
“更正确”的版本应该处理这个问题。您将需要转换方法,我已经使用过,然后它可能类似于:
public Color TemperatureRange(double value)
{
if (value < 0)
{
// blue range
var max = new ColorRGB(Color.Blue);
var color = ColorRGB.FromHSL(max.H, max.S * (-value), max.L);
return Color.FromArgb(color.R, color.G, color.B);
}
else
{
// red range
var max = new ColorRGB(Color.Red);
var color = ColorRGB.FromHSL(max.H, max.S * value, max.L);
return Color.FromArgb(color.R, color.G, color.B);
}
}
public Color TemperatureRange(双值)
{
如果(值<0)
{
//蓝区
var max=新颜色RGB(颜色为蓝色);
var color=HSL的颜色RGB(最大高度,最大S*(-值),最大高度);
返回Color.FromArgb(Color.R,Color.G,Color.B);
}
其他的
{
//红场
var max=新颜色RGB(颜色为红色);
var color=ColorRGB.FromHSL(最大高度,最大S*值,最大高度);
返回Color.FromArgb(Color.R,Color.G,Color.B);
}
}
中间会产生某种灰色(演示由ScreenToGif制作):
以下是一种简单的线性RGB缩放方法:
public Color TemperatureRange(double value)
{
// start = blue = #0000FF
// end = red = #FF0000
// range [-1; 1]
var r = (int)(0xff * (value + 1) / 2);
var g = 0;
var b = (int)(0xff * (1 - value) / 2);
return Color.FromArgb(r, g, b);
}
在中间,它将产生Color.Purple
(#800080)
“更正确”的版本应该处理这个问题。您将需要转换方法,我已经使用过,然后它可能类似于:
public Color TemperatureRange(double value)
{
if (value < 0)
{
// blue range
var max = new ColorRGB(Color.Blue);
var color = ColorRGB.FromHSL(max.H, max.S * (-value), max.L);
return Color.FromArgb(color.R, color.G, color.B);
}
else
{
// red range
var max = new ColorRGB(Color.Red);
var color = ColorRGB.FromHSL(max.H, max.S * value, max.L);
return Color.FromArgb(color.R, color.G, color.B);
}
}
public Color TemperatureRange(双值)
{
如果(值<0)
{
//蓝区
var max=新颜色RGB(颜色为蓝色);
var color=HSL的颜色RGB(最大高度,最大S*(-值),最大高度);
返回Color.FromArgb(Color.R,Color.G,Color.B);
}
其他的
{
//红场
var max=新颜色RGB(颜色为红色);
var color=ColorRGB.FromHSL(最大高度,最大S*值,最大高度);
返回Color.FromArgb(Color.R,Color.G,Color.B);
}
}
中间会产生某种灰色(演示由ScreenToGif制作):
如果您希望中间颜色为绿色,请尝试此选项
public static Color TemperatureRange(double BlueToRed)
{
double r, g, b;
// blue to cyan
if (BlueToRed < -0.5)
{
r = 0;
g = 2 + BlueToRed * 2;
b = 1;
}
// cyan to green
else if (BlueToRed < 0)
{
r = 0;
g = 1;
b = -BlueToRed * 2;
}
// green to yellow
else if (BlueToRed < 0.5)
{
r = BlueToRed * 2;
g = 1;
b = 0;
}
// yellow to red
else
{
r = 1;
g = 2 - BlueToRed * 2;
b = 0;
}
return Color.FromArgb((int)(r * 255), (int)(g * 255), (int)(b * 255));
}
公共静态色温表(双蓝)
{
双r,g,b;
//蓝到青色
如果(蓝色存储<-0.5)
{
r=0;
g=2+蓝色存储*2;
b=1;
}
//青绿
否则如果(蓝色存储<0)
{
r=0;
g=1;
b=-BlueToRed*2;
}
//绿到黄
否则,如果(蓝色存储<0.5)
{
r=蓝色存储*2;
g=1;
b=0;
}
//黄色到红色
其他的
{
r=1;
g=2-蓝色存储*2;
b=0;
}
返回颜色.FromArgb((int)(r*255),(int)(g*255),(int)(b*255));
}
如果您希望中间颜色为绿色,请尝试此选项
public static Color TemperatureRange(double BlueToRed)
{
double r, g, b;
// blue to cyan
if (BlueToRed < -0.5)
{
r = 0;
g = 2 + BlueToRed * 2;
b = 1;
}
// cyan to green
else if (BlueToRed < 0)
{
r = 0;
g = 1;
b = -BlueToRed * 2;
}
// green to yellow
else if (BlueToRed < 0.5)
{
r = BlueToRed * 2;
g = 1;
b = 0;
}
// yellow to red
else
{
r = 1;
g = 2 - BlueToRed * 2;
b = 0;
}
return Color.FromArgb((int)(r * 255), (int)(g * 255), (int)(b * 255));
}
公共静态色温表(双蓝)
{
双r,g,b;
//蓝到青色
如果(蓝色存储<-0.5)
{
r=0;
g=2+蓝色存储*2;
b=1;
}
//青绿
否则如果(蓝色存储<0)
{
r=0;
g=1;
b=-BlueToRed*2;
}
//绿到黄
否则,如果(蓝色存储<0.5)
{
r=蓝色存储*2;
g=1;
b=0;
}
//黄色到红色
其他的
{
r=1;
g=2-蓝色存储*2;
b=0;
}
返回颜色.FromArgb((int)(r*255),(int)(g*255),(int)(b*255));
}
你的意思是什么?我发现了一道数学题,你是说?我发现了一道数学题。