00001 #ifndef Impala_Core_Array_Trait_RgbLabel_h
00002 #define Impala_Core_Array_Trait_RgbLabel_h
00003 
00004 #include "Core/Array/Element/E1Cast.h"
00005 
00006 namespace Impala
00007 {
00008 namespace Core
00009 {
00010 namespace Array
00011 {
00012 namespace Trait
00013 {
00014 
00015 
00019 template<class ValT>
00020 class RgbLabel
00021 {
00022 public:
00024     RgbLabel()
00025     {
00026         mTab[0][0] = 127; mTab[0][1] = 127; mTab[0][2] = 127; 
00027         mTab[1][0] = 255; mTab[1][1] =   0; mTab[1][2] =   0; 
00028         mTab[2][0] =   0; mTab[2][1] = 255; mTab[2][2] =   0; 
00029         mTab[3][0] = 255; mTab[3][1] = 255; mTab[3][2] =   0; 
00030         mTab[4][0] =   0; mTab[4][1] =   0; mTab[4][2] = 255; 
00031         mTab[5][0] = 255; mTab[5][1] =   0; mTab[5][2] = 255; 
00032         mTab[6][0] =   0; mTab[6][1] = 255; mTab[6][2] = 255; 
00033         mTab[7][0] = 255; mTab[7][1] = 255; mTab[7][2] = 255; 
00034         mTab[8][0] =   0; mTab[8][1] =   0; mTab[8][2] =   0; 
00035     }
00036 
00038     void
00039     DoIt(const ValT& pixV, UInt8* rgbPtr)
00040     {
00041         int pix = Element::E1Cast(pixV, int());
00042         int mask = (pix == 0) ? 8 : pix % 8;
00043         *rgbPtr++ = mTab[mask][0];
00044         *rgbPtr++ = mTab[mask][1];
00045         *rgbPtr++ = mTab[mask][2];
00046     }
00047 
00048 private:
00049     int mTab[9][3];
00050 };
00051 
00052 } 
00053 } 
00054 } 
00055 } 
00056 
00057 #endif