Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

vuSphericLightfieldConverter.cpp

Go to the documentation of this file.
00001 #include "vuSphericLightfieldConverter.h"
00002 #include "../vuFixelType.h"
00003 
00004 template <int SI, class TI, int SO, class TO>
00005 vuSphericLightfieldConverter<SI,TI,SO,TO>::vuSphericLightfieldConverter()
00006 {
00007 }
00008 
00009 template <int SI, class TI, int SO, class TO> vuFixel<SO,TO>
00010 vuSphericLightfieldConverter<SI,TI,SO,TO>::_fixel(vuFixel<SI,TI> in)
00011 {
00012   vuFixel<SO,TO> result;
00013 
00014   if (SI == SO) { // many to many, e.g. 3 to 3
00015     for (dword i=0; i<SO; i++)
00016       result[i] = vuFixelTypeConverter<TI,TO>::getValue(in[i]);
00017   }
00018   else if (SI == 1) { // one to many
00019     for (dword i=0; i<SO; i++)
00020       result[i] = vuFixelTypeConverter<TI,TO>::getValue(in[0]);
00021   }
00022   else if (SO == 1) { // many to one
00023     /* possible cases: - take first, second, ...
00024        - take medium, avarage, rgb->gray
00025     */
00026 
00027     // simply take first element...
00028     result[0] = vuFixelTypeConverter<TI,TO>::getValue(in[0]); 
00029   }
00030   else if (SI < SO) { // not-so-many to many, e.g. 2 to 3
00031     cerr << "not-so-many to many is not supported in the moment" << endl;
00032     exit(0);
00033   }
00034   else { // many to not-so-many, e.g. 3 to 2
00035     cerr << "many to not-so-many is not supported in the moment" << endl;
00036     exit(0);
00037   }
00038   return result;
00039 }
00040 
00041 // in and out are considered to have the same resolution (width*height)
00042 template <int SI, class TI, int SO, class TO> void
00043 vuSphericLightfieldConverter<SI,TI,SO,TO>::_convert(vuSphericView<SI,TI> *in, vuSphericView<SO,TO> *out)
00044 {
00045   if (!_areViewsValid(in, out)) return;
00046 
00047   dword width  = in->getWidth();
00048   dword height = in->getHeight();
00049 
00050   vuFixelMap<SI,TI> *inMap  = in->getMap();
00051   vuFixelMap<SO,TO> *outMap = out->getMap();
00052 
00053   for (dword j=0; j<height; j++) {
00054     for (dword i=0; i<width; i++) {
00055       outMap->setFixel(i, j , _fixel(inMap->getFixel(i,j)));
00056     }
00057   }
00058 }
00059 
00060 vuBasicLightfieldConverter
00061 *vuSphericLightfieldConverterFactory::getConverter(vuString &name)
00062 {
00063   if      (name == "1B1B")
00064     return new vuSphLFConverter1B1B();
00065   else if (name == "1B2B")
00066     return new vuSphLFConverter1B2B();
00067   else if (name == "1B3B")
00068     return new vuSphLFConverter1B3B();
00069   else if (name == "2B1B")
00070     return new vuSphLFConverter2B1B();
00071   else if (name == "2B2B")
00072     return new vuSphLFConverter2B2B();
00073   else if (name == "2B3B")
00074     return new vuSphLFConverter2B3B();
00075   else if (name == "3B1B")
00076     return new vuSphLFConverter3B1B();
00077   else if (name == "3B2B")
00078     return new vuSphLFConverter3B2B();
00079   else if (name == "3B3B")
00080     return new vuSphLFConverter3B3B();
00081 
00082   else if (name == "1F1F")
00083     return new vuSphLFConverter1F1F();
00084   else if (name == "1F2F")
00085     return new vuSphLFConverter1F2F();
00086   else if (name == "1F3F")
00087     return new vuSphLFConverter1F3F();
00088   else if (name == "2F1F")
00089     return new vuSphLFConverter2F1F();
00090   else if (name == "2F2F")
00091     return new vuSphLFConverter2F2F();
00092   else if (name == "2F3F")
00093     return new vuSphLFConverter2F3F();
00094   else if (name == "3F1F")
00095     return new vuSphLFConverter3F1F();
00096   else if (name == "3F2F")
00097     return new vuSphLFConverter3F2F();
00098   else if (name == "3F3F")
00099     return new vuSphLFConverter3F3F();
00100 
00101   else if (name == "1F1B")
00102     return new vuSphLFConverter1F1B();
00103   else if (name == "1F2B")
00104     return new vuSphLFConverter1F2B();
00105   else if (name == "1F3B")
00106     return new vuSphLFConverter1F3B();
00107   else if (name == "2F1B")
00108     return new vuSphLFConverter2F1B();
00109   else if (name == "2F2B")
00110     return new vuSphLFConverter2F2B();
00111   else if (name == "2F3B")
00112     return new vuSphLFConverter2F3B();
00113   else if (name == "3F1B")
00114     return new vuSphLFConverter3F1B();
00115   else if (name == "3F2B")
00116     return new vuSphLFConverter3F2B();
00117   else if (name == "3F3B")
00118     return new vuSphLFConverter3F3B();
00119 
00120   else if (name == "1B1F")
00121     return new vuSphLFConverter1B1F();
00122   else if (name == "1B2F")
00123     return new vuSphLFConverter1B2F();
00124   else if (name == "1B3F")
00125     return new vuSphLFConverter1B3F();
00126   else if (name == "2B1F")
00127     return new vuSphLFConverter2B1F();
00128   else if (name == "2B2F")
00129     return new vuSphLFConverter2B2F();
00130   else if (name == "2B3F")
00131     return new vuSphLFConverter2B3F();
00132   else if (name == "3B1F")
00133     return new vuSphLFConverter3B1F();
00134   else if (name == "3B2F")
00135     return new vuSphLFConverter3B2F();
00136   else if (name == "3B3F")
00137     return new vuSphLFConverter3B3F();
00138 
00139   else 
00140     return NULL;
00141 }

Generated on Wed Dec 15 21:20:37 2004 for vuVolume by  doxygen 1.3.9.1