00001 #ifndef _VUCOLOURSPEC_H_ 00002 #define _VUCOLOURSPEC_H_ 00003 00004 #include "vuColour.h" 00005 00006 static float CXFSPECtoRGB[3][3] = { 00007 {-4.6760940e-01, 1.0060528e+01, 1.1281898e+00}, 00008 {-5.9800888e-01, 1.1977012e+01, -6.7873892e-01}, 00009 { 1.4143822e+01, -2.1922645e+00, -1.1837713e+00} 00010 }; 00011 00012 static float CXF31toSPEC[3][31] = { 00013 { 0.0541431830, 0.0696043380, 0.0829170700, 0.0812685130, 0.0779988200, 0.0754269200, 00014 0.0686281460, 0.0626345010, 0.0567715030, 0.0516375260, 0.0468861630, 0.0412096450, 00015 0.0352371240, 0.0292843220, 0.0237363350, 0.0190178730, 0.0153168740, 0.0121851310, 00016 0.0091389738, 0.0059823567, 0.0030550486, 0.0010715114, 0.0000000000, 0.0000000000, 00017 0.0011662298, 0.0028120398, 0.0041195874, 0.0059418486, 0.0095421422, 0.0177941700, 00018 0.0354721050}, 00019 { 0.0045373550, 0.0038672286, 0.0045760626, 0.0083305753, 0.0084972093, 0.0069630723, 00020 0.0132399280, 0.0199838480, 0.0264692940, 0.0323835440, 0.0376300620, 0.0430715800, 00021 0.0478926310, 0.0522457800, 0.0565191060, 0.0609287620, 0.0647395090, 0.0676024980, 00022 0.0685679850, 0.0683325430, 0.0680913760, 0.0661959880, 0.0601914540, 0.0489260240, 00023 0.0332863660, 0.0177013260, 0.0067872261, 0.0016522580, 0.0003958713, 0.0003935389, 00024 0.0000000000}, 00025 { 0.0067372441, 0.0038336965, 0.0013962379, 0.0023528823, 0.0021141319, 0.0005430682, 00026 0.0005084253, 0.0003048210, 0.0000000000, 0.0000405677, 0.0004394436, 0.0014394717, 00027 0.0028841940, 0.0047926311, 0.0067491122, 0.0084706897, 0.0101763450, 0.0127504460, 00028 0.0169259910, 0.0223156120, 0.0278259060, 0.0343945960, 0.0440122970, 0.0577456230, 00029 0.0747252390, 0.0914706190, 0.1044597200, 0.1122024000, 0.1161866000, 0.1172151600, 00030 0.1149868300} 00031 }; 00032 00033 00034 class vuColourRGBa; 00035 class vuColour31a; 00036 00041 class vuColourSpecial : public vuColour<4> 00042 { 00043 public: 00045 vuColourSpecial() : vuColour<4>() {}; 00047 vuColourSpecial(const vuColourSpecial& inst) : vuColour<4>(inst) {}; 00049 vuColourSpecial(const vuColour<4>& inst) : vuColour<4>(inst) {}; 00052 vuColourSpecial(const float *f) : vuColour<4>(f) {}; 00055 vuColourSpecial(const float f) : vuColour<4>(f) {}; 00056 00059 vuColourSpecial(const vuColour31a& inst) { from(inst); }; 00060 00062 void from(const vuColourRGBa& rgba) 00063 { 00064 fromColourN((vuColour<4>&)rgba, (float*)CXFRGBtoXYZ); 00065 }; 00066 00068 void From(const vuColour31a& c31a) 00069 { 00070 fromColourN((vuColour<32>&)c31a, (float*)CXF31toSPEC); 00071 }; 00072 00074 void to(vuColourRGBa& rgba) const 00075 { 00076 toColourN((vuColour<4>&)rgba, (float*)CXFSPECtoRGB); 00077 }; 00078 }; 00079 00080 #endif