[메모]색상의 주파수를 rgb값으로 변환해주는 프로그램 코드에 대하여......
구글에서 검색어 'color freqency to rgb color' 에서 두번쨰 검색결과 치니 매우 만족할 만한 검색 결과가 나왔습니다.
나중에 써먹기 위해 메모해놉니다.
제가 찾은 링크는
https://stackoverflow.com/questions/1472514/convert-light-frequency-to-rgb
입니다.
위 링크에서 얻은 다음 소스는 너무 간략하게 잘되있어서 나중에 원하는 프로그램코드로 변환하면 될듯이요.
또 위 링크에서 원리를 설명한 링크된 사이트도 참잘되있군요
http://www.fourmilab.ch/documents/specrend/
영어라서 아쉽지만 'CIE 색상' 이라고 검색해서 한국위키보면 한국위키도 잘 설명되어있습니다만 왠지 5%정도부족한듯이요....소스코드도 없고, 변환행렬에 사용된 값도 달랑하나인데 출처가 불명확해보입니다.
static private double Gamma = 0.80;
static private double IntensityMax = 255;
/** Taken from Earl F. Glynn's web page:
* <a href="http://www.efg2.com/Lab/ScienceAndEngineering/Spectra.htm">Spectra Lab Report</a>
* */
public static int[] waveLengthToRGB(double Wavelength){
double factor;
double Red,Green,Blue;
if((Wavelength >= 380) && (Wavelength<440)){
Red = -(Wavelength - 440) / (440 - 380);
Green = 0.0;
Blue = 1.0;
}else if((Wavelength >= 440) && (Wavelength<490)){
Red = 0.0;
Green = (Wavelength - 440) / (490 - 440);
Blue = 1.0;
}else if((Wavelength >= 490) && (Wavelength<510)){
Red = 0.0;
Green = 1.0;
Blue = -(Wavelength - 510) / (510 - 490);
}else if((Wavelength >= 510) && (Wavelength<580)){
Red = (Wavelength - 510) / (580 - 510);
Green = 1.0;
Blue = 0.0;
}else if((Wavelength >= 580) && (Wavelength<645)){
Red = 1.0;
Green = -(Wavelength - 645) / (645 - 580);
Blue = 0.0;
}else if((Wavelength >= 645) && (Wavelength<781)){
Red = 1.0;
Green = 0.0;
Blue = 0.0;
}else{
Red = 0.0;
Green = 0.0;
Blue = 0.0;
};
// Let the intensity fall off near the vision limits
if((Wavelength >= 380) && (Wavelength<420)){
factor = 0.3 + 0.7*(Wavelength - 380) / (420 - 380);
}else if((Wavelength >= 420) && (Wavelength<701)){
factor = 1.0;
}else if((Wavelength >= 701) && (Wavelength<781)){
factor = 0.3 + 0.7*(780 - Wavelength) / (780 - 700);
}else{
factor = 0.0;
};
int[] rgb = new int[3];
// Don't want 0^x = 1 for x <> 0
rgb[0] = Red==0.0 ? 0 : (int) Math.round(IntensityMax * Math.pow(Red * factor, Gamma));
rgb[1] = Green==0.0 ? 0 : (int) Math.round(IntensityMax * Math.pow(Green * factor, Gamma));
rgb[2] = Blue==0.0 ? 0 : (int) Math.round(IntensityMax * Math.pow(Blue * factor, Gamma));
return rgb;
}
아직 Payout 되지 않은 관련 글
모든 기간 관련 글
인터레스팀(@interesteem)은 AI기반 관심있는 연관글을 자동으로 추천해 주는 서비스입니다.
#interesteem 태그를 달고 글을 써주세요!
날이 너무 덥습니다......덥다 ㅠ
보팅감사합니다 .. . . . 찬물로 샤워한후 시원한 수박먹으면 더위 싹 사라지는 것 같던데요~~~~~~~~