Wavelength to RGB convertor using C#

Topics on common programming languages
Post Reply
User avatar
Saman
Lieutenant Colonel
Lieutenant Colonel
Posts: 828
Joined: Fri Jul 31, 2009 10:32 pm
Location: Mount Lavinia

Wavelength to RGB convertor using C#

Post by Saman » Thu Feb 09, 2012 2:44 am

Code: Select all

private Color getColorFromWaveLength(int Wavelength){
  double Gamma = 1.00;
  int IntensityMax = 255;
  double Blue;
  double Green;
  double Red;
  double Factor;

  if(Wavelength >= 350 && 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 - 350d) / (420d - 350d);
  }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.factorAdjust(Red, Factor, IntensityMax, Gamma);
  int G = this.factorAdjust(Green, Factor, IntensityMax, Gamma);
  int B = this.factorAdjust(Blue, Factor, IntensityMax, Gamma);

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

private int factorAdjust(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));
   }
}

private void trackBar1_Scroll(object sender, EventArgs e) { 
   this.panel1.BackColor = getColorFromWaveLength(this.trackBar1.Value); 
   this.label1.Text = this.trackBar1.Value.ToString() + " nm"; 
   this.label2.Text = "R: " + 
   ((Color) getColorFromWaveLength(this.trackBar1.Value)).R.ToString(); 
   this.label3.Text = "G: " + 
   ((Color) getColorFromWaveLength(this.trackBar1.Value)).G.ToString(); 
   this.label4.Text = "B: " + 
   ((Color) getColorFromWaveLength(this.trackBar1.Value)).B.ToString(); 
}
Full code
wavelengthToRGB.zip
(4.82 KiB) Downloaded 569 times
Post Reply

Return to “.Net & Other Programming”