<!doctype html public "-//W3C//DTD W3 HTML//EN">
<html><head><style type="text/css"><!--
blockquote, dl, ul, ol, li { padding-top: 0 ; padding-bottom: 0 }
 --></style><title>Re: Convert frequency to RGB</title></head><body>
<blockquote type="cite" cite><br>
Message: 14<br>
Date: Mon, 11 Aug 2003 12:20:03 -0600</blockquote>
<blockquote type="cite" cite>Subject: Re: Convert frequency to RGB<br>
From: Dar Scott &lt;dsc@swcp.com&gt;<br>
To: use-revolution@lists.runrev.com<br>
Reply-To: use-revolution@lists.runrev.com<br>
<br>
<br>
On Sunday, August 10, 2003, at 10:03 AM, Jim Hurley wrote:<br>
<br>
&gt; I am trying to create the effect of gradually running through
all&nbsp;<br>
&gt; colors of the visible spectrum.<br>
<br>
Maybe you can scan in a picture you like and then use the imageData
as&nbsp;<br>
your table.<br>
<br>
There are several factors:&nbsp; Sun color, eye response tristimulus
values&nbsp;<br>
or chramaticity coordinates (see CIE), phosphor colors and the effect
</blockquote>
<blockquote type="cite" cite>of faking colors outside what the
phosphors can do.&nbsp; I don't know much&nbsp;<br>
about phosphors, but I can provide some info on the sun and on CIE
data.<br>
<br>
For your effect, you might want to see if a simplification works.<br>
<br>
You should be fine with straight-line approximations between
RGB&nbsp;<br>
colors.&nbsp; Do this by making a straight-line interpolation of
each&nbsp;<br>
component.&nbsp; Create a table from wavelength (or lightspeed number
or&nbsp;<br>
whatever) to color.&nbsp; Maybe three arrays will work.<br>
<br>
If you need help in getting even rough data for your table, let me
know.<br>
</blockquote>
<blockquote type="cite" cite>Dar</blockquote>
<div><br></div>
<div>Dar,</div>
<div><br></div>
<div>I think I have found what I need. I had hoped I could find an
algebraic formula for the translation from wavelength to rgb values. I
did a Google search and found the following program; I will see if I
can translate it into Transcript.</div>
<div><br></div>
<div>Jim</div>
<div><br></div>
<div><font color="#000000">PROCEDURE WavelengthToRGB(CONST
Wavelength:&nbsp; Nanometers;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span
></span
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span
></span>&nbsp;&nbsp;&nbsp; VAR R,G,B:&nbsp; BYTE);<br>
&nbsp; CONST<br>
&nbsp;&nbsp;&nbsp; Gamma&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
=&nbsp;&nbsp; 0.80;<br>
&nbsp;&nbsp;&nbsp; IntensityMax = 255;<br>
&nbsp; VAR<br>
&nbsp;&nbsp;&nbsp; Blue&nbsp;&nbsp; :&nbsp; DOUBLE;<br>
&nbsp;&nbsp;&nbsp; factor :&nbsp; DOUBLE;<br>
&nbsp;&nbsp;&nbsp; Green&nbsp; :&nbsp; DOUBLE;<br>
&nbsp;&nbsp;&nbsp; Red&nbsp;&nbsp;&nbsp; :&nbsp; DOUBLE;<br>
&nbsp; FUNCTION Adjust(CONST Color, Factor:&nbsp; DOUBLE):&nbsp;
INTEGER;<br>
&nbsp; BEGIN<br>
&nbsp;&nbsp;&nbsp; IF&nbsp;&nbsp; Color = 0.0<br>
&nbsp;&nbsp;&nbsp; THEN RESULT := 0&nbsp;&nbsp;&nbsp;&nbsp; // Don't
want 0^x = 1 for x &lt;&gt; 0<br>
&nbsp;&nbsp;&nbsp; ELSE RESULT := ROUND(IntensityMax * Power(Color *
Factor, Gamma))<br>
&nbsp; END {Adjust};<br>
BEGIN<br>
&nbsp; CASE TRUNC(Wavelength) OF<br>
&nbsp;&nbsp;&nbsp; 380..439:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BEGIN<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Red&nbsp;&nbsp; :=
-(Wavelength - 440) / (440 - 380);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Green := 0.0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Blue&nbsp; := 1.0<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END;<br>
&nbsp;&nbsp;&nbsp; 440..489:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BEGIN<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Red&nbsp;&nbsp; := 0.0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Green := (Wavelength - 440)
/ (490 - 440);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Blue&nbsp; := 1.0<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END;<br>
&nbsp;&nbsp;&nbsp; 490..509:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BEGIN<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Red&nbsp;&nbsp; := 0.0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Green := 1.0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Blue&nbsp; := -(Wavelength
- 510) / (510 - 490)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END;<br>
&nbsp;&nbsp;&nbsp; 510..579:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BEGIN<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Red&nbsp;&nbsp; :=
(Wavelength - 510) / (580 - 510);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Green := 1.0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Blue&nbsp; := 0.0<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END;<br>
&nbsp;&nbsp;&nbsp; 580..644:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BEGIN<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Red&nbsp;&nbsp; := 1.0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Green := -(Wavelength -
645) / (645 - 580);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Blue&nbsp; := 0.0<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END;<br>
&nbsp;&nbsp;&nbsp; 645..780:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BEGIN<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Red&nbsp;&nbsp; := 1.0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Green := 0.0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Blue&nbsp; := 0.0<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END;<br>
&nbsp;&nbsp;&nbsp; ELSE<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Red&nbsp;&nbsp; := 0.0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Green := 0.0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Blue&nbsp; := 0.0<br>
&nbsp; END;<br>
&nbsp; // Let the intensity fall off near the vision limits<br>
&nbsp; CASE TRUNC(Wavelength) OF<br>
&nbsp;&nbsp;&nbsp; 380..419:&nbsp; factor := 0.3 + 0.7*(Wavelength -
380) / (420 - 380);<br>
&nbsp;&nbsp;&nbsp; 420..700:&nbsp; factor := 1.0;<br>
&nbsp;&nbsp;&nbsp; 701..780:&nbsp; factor := 0.3 + 0.7*(780 -
Wavelength) / (780 - 700)<br>
&nbsp;&nbsp;&nbsp; ELSE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; factor :=
0.0<br>
&nbsp; END;<br>
<br>
&nbsp; R := Adjust(Red,&nbsp;&nbsp; Factor);<br>
&nbsp; G := Adjust(Green, Factor);<br>
&nbsp; B := Adjust(Blue,&nbsp; Factor)<br>
END
{WavelengthToRGB};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span
></span
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span
></span
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br
>
</font></div>
</body>
</html>