#include #include #include void hsi2rgb(double* rgb, double* hsi); int main(int argc, char** argv) { if (argc != 4) { cout << "Usage: " << argv[0] << " R G B" << endl; exit(1); } double H = atof(argv[1]); double S = atof(argv[2]); double I = atof(argv[3]); double hsi[3]; hsi[0] = H; hsi[1] = S; hsi[2] = I; double rgb[3]; hsi2rgb(rgb, hsi); cout << "R = " << (int)(256 * rgb[0] + 0.5) << endl; cout << "G = " << (int)(256 * rgb[1] + 0.5) << endl; cout << "B = " << (int)(256 * rgb[2] + 0.5) << endl; return 0; } ////////////////////////////// // // hsi2rgb -- convert from HSI color space to RGB color space. // #ifndef PI #define PI M_PI #endif void hsi2rgb(double* rgb, double* hsi) { double& R = rgb[0]; double& G = rgb[1]; double& B = rgb[2]; double& H = hsi[0]; double& S = hsi[1]; double& I = hsi[2]; double r; double g; double b; if (H < 1.0/3.0) { b = (1-S)/3; r = (1+S*cos(2*PI*H)/cos(PI/3-2*PI*H))/3.0; g = 1 - (b + r); } else if (H < 2.0/3.0) { H = H - 1.0/3.0; r = (1-S)/3; g = (1+S*cos(2*PI*H)/cos(PI/3-2*PI*H))/3.0; b = 1 - (r+g); } else { H = H - 2.0/3.0; g = (1-S)/3; b = (1+S*cos(2*PI*H)/cos(PI/3-2*PI*H))/3.0; r = 1 - (g+b); } R = I * r * 3; G = I * g * 3; B = I * b * 3; }