怎么样计算波长到RGB?

怎么样计算波长到RGB?

波长到RGB的算法

作者: CruelYoung

参考: http://www.midnightkite.com/color.html

更多访问: http://www.image2003.com

C# 编写

效果图:

怎么样计算波长到RGB?

相关的算法代码

private Color WavelenghToRGB(int Wavelength)
{
double Gamma = 0.8;
int IntensityMax = 255;

double Blue;
double Green;
double Red;
double factor;

if(Wavelength >= 380 && Wavelength <= 439)
{
Red = -(Wavelength - 440d) / (440d - 350d);
Green = 0.0;
Blue = 1.0;
}
else if(Wavelength >= 440 && Wavelength <= 489)
{
Red = 0.0;
Green = (Wavelength - 440d) / (490d - 440d);
Blue = 1.0;
}
else if(Wavelength >= 490 && Wavelength <= 509)
{
Red = 0.0;
Green = 1.0;
Blue = -(Wavelength - 510d) / (510d - 490d);
}
else if(Wavelength >= 510 && Wavelength <= 579)
{
Red = (Wavelength - 510d) / (580d - 510d);
Green = 1.0;
Blue = 0.0;
}
else if(Wavelength >= 580 && Wavelength <= 644)
{
Red = 1.0;
Green = -(Wavelength - 645d) / (645d - 580d);
Blue = 0.0;
}
else if(Wavelength >= 645 && Wavelength <= 780)
{
Red = 1.0;
Green = 0.0;
Blue = 0.0;
}
else
{
Red = 0.0;
Green = 0.0;
Blue = 0.0;
}

if(Wavelength >= 350 && Wavelength <= 419)
{
factor = 0.3 + 0.7*(Wavelength - 380d) / (420d - 380d);
}
else if(Wavelength >= 420 && Wavelength <= 700)
{
factor = 1.0;
}
else if(Wavelength >= 701 && Wavelength <= 780)
{
factor = 0.3 + 0.7*(780d - Wavelength) / (780d - 700d);
}
else
{
factor = 0.0;
}

int R = this.Adjust(Red, factor, IntensityMax, Gamma);
int G = this.Adjust(Green, factor, IntensityMax, Gamma);
int B = this.Adjust(Blue, factor, IntensityMax, Gamma);

return Color.FromArgb(R, G, B);
}

private int Adjust(double Color, double Factor, int IntensityMax, double Gamma)
{
if(Color == 0.0)
{
return 0;
}
else
{
return (int) Math.Round(IntensityMax * Math.Pow(Color * Factor, Gamma));
}

}