Home || Architecture || Video Search || Visual Search || Scripts || Applications || Important Messages || OGL || Src

Color.h

Go to the documentation of this file.
00001 #ifndef Impala_Core_Array_Element_Color_h
00002 #define Impala_Core_Array_Element_Color_h
00003 
00004 #include "Core/Array/Element/Vec3Real64.h"
00005 #include "Core/Array/Element/ColConvert.h"
00006 
00007 namespace Impala
00008 {
00009 namespace Core
00010 {
00011 namespace Array
00012 {
00013 namespace Element
00014 {
00015 
00016 
00020 enum ColorModel
00021 {
00022     RGB,
00023     CMY,
00024     XYZ,
00025     Lab,
00026     Luv,
00027     OOO,
00028     HSI
00029 };
00030 
00033 class Color {
00034 public:
00035 
00037     Color(): mValue(0,0,0), mSpace(RGB)
00038     { 
00039     }
00040 
00042     Color(Vec3Real64 color, ColorModel space = RGB) : mValue(color),
00043                                                       mSpace(space)
00044     { 
00045     }
00046 
00048     Color(const Color& rhs): mValue(rhs.mValue), mSpace(rhs.mSpace)
00049     {
00050     }
00051 
00053     Color&
00054     operator=(const Color& rhs)
00055     {
00056         mValue = rhs.mValue;
00057         mSpace = rhs.mSpace;
00058         return *this;
00059     }
00060 
00062     const Vec3Real64&
00063     Value() const
00064     { 
00065         return mValue; 
00066     }
00067 
00071     Color
00072     Convert(const ColorModel space) const
00073     {
00074         switch (space) {
00075         case RGB: return ToRGB();
00076         case CMY: return ToCMY();
00077         case XYZ: return ToXYZ();
00078         case Lab: return ToLab();
00079         case Luv: return ToLuv();
00080         case OOO: return ToOOO();
00081         case HSI: return ToHSI();
00082         }
00083         return Color();
00084     }
00085 
00087     Color
00088     ToRGB() const
00089     { 
00090         switch (mSpace) {
00091         case RGB:
00092             return *this;
00093         case CMY:
00094             return Color(ColCMY2RGB(mValue), RGB);
00095         case XYZ:
00096             return Color(ColXYZ2RGB(mValue), RGB);
00097         case Lab: {
00098             Vec3Real64 xyz = ColLab2XYZ(mValue);
00099             return Color(ColXYZ2RGB(xyz), RGB);
00100         }
00101         case Luv: {
00102             Vec3Real64 xyz = ColLuv2XYZ(mValue);
00103             return Color(ColXYZ2RGB(xyz), RGB);
00104         }
00105         case OOO:
00106             return Color(ColOOO2RGB(mValue), RGB);
00107         case HSI:
00108             return Color(ColHSI2RGB(mValue), RGB);
00109         }
00110 
00111         return Color();
00112     }
00113 
00115     Color
00116     ToCMY() const
00117     { 
00118         switch (mSpace) {
00119         case RGB:
00120             return Color(ColRGB2CMY(mValue), CMY);
00121         case CMY:
00122             return *this;
00123         case XYZ:
00124             return Color(ColXYZ2CMY(mValue), CMY);
00125         case Lab: {
00126             Vec3Real64 xyz = ColLab2XYZ(mValue);
00127             return Color(ColXYZ2CMY(xyz), CMY);
00128         }
00129         case Luv: {
00130             Vec3Real64 xyz = ColLuv2XYZ(mValue);
00131             return Color(ColXYZ2CMY(xyz), CMY);
00132         }
00133         case OOO: {
00134             Vec3Real64 rgb = ColOOO2RGB(mValue);
00135             return Color(ColRGB2CMY(rgb), CMY);
00136         }
00137         case HSI: {
00138             Vec3Real64 rgb = ColHSI2RGB(mValue);
00139             return Color(ColRGB2CMY(rgb), CMY);
00140         }
00141         }
00142 
00143         return Color();
00144     }
00145 
00147     Color
00148     ToXYZ() const
00149     { 
00150         switch (mSpace) {
00151         case RGB:
00152             return Color(ColRGB2XYZ(mValue), XYZ);
00153         case CMY:
00154             return Color(ColCMY2XYZ(mValue), XYZ);
00155         case XYZ:
00156             return *this;
00157         case Lab:
00158             return Color(ColLab2XYZ(mValue), XYZ);
00159         case Luv:
00160             return Color(ColLuv2XYZ(mValue), XYZ);
00161         case OOO:
00162             return Color(ColOOO2XYZ(mValue), XYZ);
00163         case HSI: {
00164             Vec3Real64 rgb = ColHSI2RGB(mValue);
00165             return Color(ColRGB2XYZ(rgb), XYZ);
00166         }
00167         }
00168 
00169         return Color();
00170     }
00171 
00173     Color
00174     ToLab() const
00175     { 
00176         switch (mSpace) {
00177         case RGB: {
00178             Vec3Real64 xyz = ColRGB2XYZ(mValue);
00179             return Color(ColXYZ2Lab(xyz), Lab);
00180         }
00181         case CMY: {
00182             Vec3Real64 xyz = ColCMY2XYZ(mValue);
00183             return Color(ColXYZ2Lab(xyz), Lab);
00184         }
00185         case XYZ:
00186             return Color(ColXYZ2Lab(mValue), Lab);
00187         case Lab:
00188             return *this;
00189         case Luv: {
00190             Vec3Real64 xyz = ColLuv2XYZ(mValue);
00191             return Color(ColXYZ2Lab(xyz), Lab);
00192         }
00193         case OOO: {
00194             Vec3Real64 xyz = ColOOO2XYZ(mValue);
00195             return Color(ColXYZ2Lab(xyz), Lab);
00196         }
00197         case HSI: {
00198             Vec3Real64 rgb = ColHSI2RGB(mValue);
00199             Vec3Real64 xyz = ColRGB2XYZ(rgb);
00200             return Color(ColXYZ2Lab(xyz), Lab);
00201         }
00202         }
00203 
00204         return Color();
00205     }
00206 
00208     Color
00209     ToLuv() const
00210     { 
00211         switch (mSpace) {
00212         case RGB: {
00213             Vec3Real64 xyz = ColRGB2XYZ(mValue);
00214             return Color(ColXYZ2Luv(xyz), Luv);
00215         }
00216         case CMY: {
00217             Vec3Real64 xyz = ColCMY2XYZ(mValue);
00218             return Color(ColXYZ2Luv(xyz), Luv);
00219         }
00220         case XYZ:
00221             return Color(ColXYZ2Luv(mValue), Luv);
00222         case Lab: {
00223             Vec3Real64 xyz = ColLab2XYZ(mValue);
00224             return Color(ColXYZ2Luv(xyz), Luv);
00225         }
00226         case Luv:
00227             return *this;
00228         case OOO: {
00229             Vec3Real64 xyz = ColOOO2XYZ(mValue);
00230             return Color(ColXYZ2Luv(xyz), Luv);
00231         }
00232         case HSI: {
00233             Vec3Real64 rgb = ColHSI2RGB(mValue);
00234             Vec3Real64 xyz = ColRGB2XYZ(rgb);
00235             return Color(ColXYZ2Luv(xyz), Luv);
00236         }
00237         }
00238 
00239         return Color();
00240     }
00241 
00243     Color
00244     ToOOO() const
00245     { 
00246         switch (mSpace) {
00247         case RGB:
00248             return Color(ColRGB2OOO(mValue), OOO);
00249         case CMY: {
00250             Vec3Real64 rgb = ColCMY2RGB(mValue);
00251             return Color(ColRGB2OOO(rgb), OOO);
00252         }
00253         case XYZ:
00254             return Color(ColXYZ2OOO(mValue), OOO);
00255         case Lab: {
00256             Vec3Real64 xyz = ColLab2XYZ(mValue);
00257             return Color(ColXYZ2OOO(mValue), OOO);
00258         }
00259         case Luv: {
00260             Vec3Real64 xyz = ColLuv2XYZ(mValue);
00261             return Color(ColXYZ2OOO(mValue), OOO);
00262         }
00263         case OOO:
00264             return *this;
00265         case HSI: {
00266             Vec3Real64 rgb = ColHSI2RGB(mValue);
00267             return Color(ColRGB2OOO(rgb), OOO);
00268         }
00269         }
00270 
00271         return Color();
00272     }
00273 
00275     Color
00276     ToHSI() const
00277     { 
00278         switch (mSpace) {
00279         case RGB:
00280             return Color(ColRGB2HSI(mValue), HSI);
00281         case CMY: {
00282             Vec3Real64 rgb = ColCMY2RGB(mValue);
00283             return Color(ColRGB2HSI(rgb), HSI);
00284         }
00285         case XYZ: {
00286             Vec3Real64 rgb = ColXYZ2RGB(mValue);
00287             return Color(ColRGB2HSI(rgb), HSI);
00288         }
00289         case Lab: {
00290             Vec3Real64 xyz = ColLab2XYZ(mValue);
00291             Vec3Real64 rgb = ColXYZ2RGB(xyz);
00292             return Color(ColRGB2HSI(rgb), HSI);
00293         }
00294         case Luv: {
00295             Vec3Real64 xyz = ColLuv2XYZ(mValue);
00296             Vec3Real64 rgb = ColXYZ2RGB(xyz);
00297             return Color(ColRGB2HSI(rgb), HSI);
00298         }
00299         case OOO: {
00300             Vec3Real64 rgb = ColOOO2RGB(mValue);
00301             return Color(ColRGB2HSI(rgb), HSI);
00302         }
00303         case HSI:
00304             return *this;
00305         }
00306 
00307         return Color();
00308     }
00309 
00311     int
00312     operator==(const Color& c) const
00313     {
00314         return (mSpace == c.mSpace) && (mValue == c.mValue);
00315     }
00316 
00318     int
00319     operator!=(const Color& c) const
00320     {
00321         return !(*this == c);
00322     }
00323 
00324 private:
00325     Vec3Real64            mValue;
00326     ColorModel            mSpace;
00327 };
00328 
00329 } // namespace Element
00330 } // namespace Array
00331 } // namespace Core
00332 } // namespace Impala
00333 
00334 #endif

Generated on Fri Mar 19 09:30:44 2010 for ImpalaSrc by  doxygen 1.5.1