contrib/brl/bbas/vidl2/vidl2_color.cxx

Go to the documentation of this file.
00001 // This is brl/bbas/vidl2/vidl2_color.cxx
00002 #include "vidl2_color.h"
00003 //:
00004 // \file
00005 // \author Matt Leotta
00006 //
00007 
00008 #include <vcl_iostream.h>
00009 
00010 
00011 
00012 
00013 //: Define the function pointer for pixel format conversion functions
00014 // These are the functions that use types other than vxl_byte
00015 typedef void (*vidl2_color_conv_fptr_8_16)(const vxl_byte* in, vxl_uint_16* out);
00016 typedef void (*vidl2_color_conv_fptr_16_8)(const vxl_uint_16* in, vxl_byte* out);
00017 typedef void (*vidl2_color_conv_fptr_16_16)(const vxl_uint_16* in, vxl_uint_16* out);
00018 typedef void (*vidl2_color_conv_fptr_8_1)(const vxl_byte* in, bool* out);
00019 typedef void (*vidl2_color_conv_fptr_1_8)(const bool* in, vxl_byte* out);
00020 typedef void (*vidl2_color_conv_fptr_1_16)(const bool* in, vxl_uint_16* out);
00021 typedef void (*vidl2_color_conv_fptr_16_1)(const vxl_uint_16* in, bool* out);
00022 typedef void (*vidl2_color_conv_fptr_1_1)(const bool* in, bool* out);
00023 
00024 
00025 
00026 //: Returns a color conversion function based on runtime values
00027 // The function returned is always a vidl2_color_conv_fptr which
00028 // converts const vxl_byte* to vxl_byte*.  Some of these function
00029 // may actually reinterpret the data as other types (i.e. bool* or
00030 // vxl_uint_16*) via reinterpret_cast
00031 vidl2_color_conv_fptr
00032 vidl2_color_converter_func( vidl2_pixel_color in_C, unsigned in_bpp,
00033                             vidl2_pixel_color out_C, unsigned out_bpp)
00034 {
00035   switch(in_C){
00036     case VIDL2_PIXEL_COLOR_MONO:
00037     {
00038       switch(out_C){
00039         case VIDL2_PIXEL_COLOR_MONO:
00040         {
00041           if(in_bpp == 1){
00042             if(out_bpp == 1){
00043               vidl2_color_conv_fptr_1_1 fp =
00044                   &vidl2_color_converter<VIDL2_PIXEL_COLOR_MONO,VIDL2_PIXEL_COLOR_MONO>::convert;
00045               return reinterpret_cast<vidl2_color_conv_fptr>(fp);
00046             }
00047             else if(out_bpp == 16)
00048             {
00049               vidl2_color_conv_fptr_1_16 fp =
00050                   &vidl2_color_converter<VIDL2_PIXEL_COLOR_MONO,VIDL2_PIXEL_COLOR_MONO>::convert;
00051               return reinterpret_cast<vidl2_color_conv_fptr>(fp);
00052             }
00053             else
00054             {
00055               vidl2_color_conv_fptr_1_8 fp =
00056                   &vidl2_color_converter<VIDL2_PIXEL_COLOR_MONO,VIDL2_PIXEL_COLOR_MONO>::convert;
00057               return reinterpret_cast<vidl2_color_conv_fptr>(fp);
00058             }
00059           }
00060           else if(in_bpp == 16)
00061           {
00062             if(out_bpp == 1){
00063               vidl2_color_conv_fptr_16_1 fp =
00064                   &vidl2_color_converter<VIDL2_PIXEL_COLOR_MONO,VIDL2_PIXEL_COLOR_MONO>::convert;
00065               return reinterpret_cast<vidl2_color_conv_fptr>(fp);
00066             }
00067             else if(out_bpp == 16)
00068             {
00069               vidl2_color_conv_fptr_16_16 fp =
00070                   &vidl2_color_converter<VIDL2_PIXEL_COLOR_MONO,VIDL2_PIXEL_COLOR_MONO>::convert;
00071               return reinterpret_cast<vidl2_color_conv_fptr>(fp);
00072             }
00073             else
00074             {
00075               vidl2_color_conv_fptr_16_8 fp =
00076                   &vidl2_color_converter<VIDL2_PIXEL_COLOR_MONO,VIDL2_PIXEL_COLOR_MONO>::convert;
00077               return reinterpret_cast<vidl2_color_conv_fptr>(fp);
00078             }
00079           }
00080           else
00081           {
00082             if(out_bpp == 1){
00083               vidl2_color_conv_fptr_8_1 fp =
00084                   &vidl2_color_converter<VIDL2_PIXEL_COLOR_MONO,VIDL2_PIXEL_COLOR_MONO>::convert;
00085               return reinterpret_cast<vidl2_color_conv_fptr>(fp);
00086             }
00087             else if(out_bpp == 16)
00088             {
00089               vidl2_color_conv_fptr_8_16 fp =
00090                   &vidl2_color_converter<VIDL2_PIXEL_COLOR_MONO,VIDL2_PIXEL_COLOR_MONO>::convert;
00091               return reinterpret_cast<vidl2_color_conv_fptr>(fp);
00092             }
00093             else
00094             {
00095               vidl2_color_conv_fptr fp =
00096                   &vidl2_color_converter<VIDL2_PIXEL_COLOR_MONO,VIDL2_PIXEL_COLOR_MONO>::convert;
00097               return fp;
00098             }
00099           }
00100         }
00101         case VIDL2_PIXEL_COLOR_RGB:
00102         {
00103           if(in_bpp == 1){
00104             vidl2_color_conv_fptr_1_8 fp =
00105                 &vidl2_color_converter<VIDL2_PIXEL_COLOR_MONO,VIDL2_PIXEL_COLOR_RGB>::convert;
00106             return reinterpret_cast<vidl2_color_conv_fptr>(fp);
00107           }
00108           else if(in_bpp == 16)
00109           {
00110             vidl2_color_conv_fptr_16_8 fp =
00111                 &vidl2_color_converter<VIDL2_PIXEL_COLOR_MONO,VIDL2_PIXEL_COLOR_RGB>::convert;
00112             return reinterpret_cast<vidl2_color_conv_fptr>(fp);
00113           }
00114           else
00115           {
00116             vidl2_color_conv_fptr fp =
00117                 &vidl2_color_converter<VIDL2_PIXEL_COLOR_MONO,VIDL2_PIXEL_COLOR_RGB>::convert;
00118             return fp;
00119           }
00120         }
00121         case VIDL2_PIXEL_COLOR_RGBA:
00122         {
00123           if(in_bpp == 1){
00124             vidl2_color_conv_fptr_1_8 fp =
00125                 &vidl2_color_converter<VIDL2_PIXEL_COLOR_MONO,VIDL2_PIXEL_COLOR_RGBA>::convert;
00126             return reinterpret_cast<vidl2_color_conv_fptr>(fp);
00127           }
00128           else if(in_bpp == 16)
00129           {
00130             vidl2_color_conv_fptr_16_8 fp =
00131                 &vidl2_color_converter<VIDL2_PIXEL_COLOR_MONO,VIDL2_PIXEL_COLOR_RGBA>::convert;
00132             return reinterpret_cast<vidl2_color_conv_fptr>(fp);
00133           }
00134           else
00135           {
00136             vidl2_color_conv_fptr fp =
00137                 &vidl2_color_converter<VIDL2_PIXEL_COLOR_MONO,VIDL2_PIXEL_COLOR_RGBA>::convert;
00138             return fp;
00139           }
00140         }
00141         case VIDL2_PIXEL_COLOR_YUV:
00142         {
00143           if(in_bpp == 1){
00144             vidl2_color_conv_fptr_1_8 fp =
00145                 &vidl2_color_converter<VIDL2_PIXEL_COLOR_MONO,VIDL2_PIXEL_COLOR_YUV>::convert;
00146             return reinterpret_cast<vidl2_color_conv_fptr>(fp);
00147           }
00148           else if(in_bpp == 16)
00149           {
00150             vidl2_color_conv_fptr_16_8 fp =
00151                 &vidl2_color_converter<VIDL2_PIXEL_COLOR_MONO,VIDL2_PIXEL_COLOR_YUV>::convert;
00152             return reinterpret_cast<vidl2_color_conv_fptr>(fp);
00153           }
00154           else
00155           {
00156             vidl2_color_conv_fptr fp =
00157                 &vidl2_color_converter<VIDL2_PIXEL_COLOR_MONO,VIDL2_PIXEL_COLOR_YUV>::convert;
00158             return fp;
00159           }
00160         }
00161         default:
00162           break;
00163       }
00164       break;
00165     }
00166     case VIDL2_PIXEL_COLOR_RGB:
00167     {
00168       switch(out_C){
00169         case VIDL2_PIXEL_COLOR_MONO:
00170         {
00171           if(out_bpp == 1){
00172             vidl2_color_conv_fptr_8_1 fp =
00173                 &vidl2_color_converter<VIDL2_PIXEL_COLOR_RGB,VIDL2_PIXEL_COLOR_MONO>::convert;
00174             return reinterpret_cast<vidl2_color_conv_fptr>(fp);
00175           }
00176           else if(out_bpp == 16)
00177           {
00178             vidl2_color_conv_fptr_8_16 fp =
00179                 &vidl2_color_converter<VIDL2_PIXEL_COLOR_RGB,VIDL2_PIXEL_COLOR_MONO>::convert;
00180             return reinterpret_cast<vidl2_color_conv_fptr>(fp);
00181           }
00182           else
00183           {
00184             vidl2_color_conv_fptr fp =
00185                 &vidl2_color_converter<VIDL2_PIXEL_COLOR_RGB,VIDL2_PIXEL_COLOR_MONO>::convert;
00186             return fp;
00187           }
00188         }
00189         case VIDL2_PIXEL_COLOR_RGB:
00190         {
00191           vidl2_color_conv_fptr fp =
00192               &vidl2_color_converter<VIDL2_PIXEL_COLOR_RGB,VIDL2_PIXEL_COLOR_RGB>::convert;
00193           return fp;
00194         }
00195         case VIDL2_PIXEL_COLOR_RGBA:
00196         {
00197           vidl2_color_conv_fptr fp =
00198               &vidl2_color_converter<VIDL2_PIXEL_COLOR_RGB,VIDL2_PIXEL_COLOR_RGBA>::convert;
00199           return fp;
00200         }
00201         case VIDL2_PIXEL_COLOR_YUV:
00202         {
00203           vidl2_color_conv_fptr fp =
00204               &vidl2_color_converter<VIDL2_PIXEL_COLOR_RGB,VIDL2_PIXEL_COLOR_YUV>::convert;
00205           return fp;
00206         }
00207         default:
00208           break;
00209       }
00210       break;
00211     }
00212     case VIDL2_PIXEL_COLOR_RGBA:
00213     {
00214       switch(out_C){
00215         case VIDL2_PIXEL_COLOR_MONO:
00216         {
00217           if(out_bpp == 1){
00218             vidl2_color_conv_fptr_8_1 fp =
00219                 &vidl2_color_converter<VIDL2_PIXEL_COLOR_RGBA,VIDL2_PIXEL_COLOR_MONO>::convert;
00220             return reinterpret_cast<vidl2_color_conv_fptr>(fp);
00221           }
00222           else if(out_bpp == 16)
00223           {
00224             vidl2_color_conv_fptr_8_16 fp =
00225                 &vidl2_color_converter<VIDL2_PIXEL_COLOR_RGBA,VIDL2_PIXEL_COLOR_MONO>::convert;
00226             return reinterpret_cast<vidl2_color_conv_fptr>(fp);
00227           }
00228           else
00229           {
00230             vidl2_color_conv_fptr fp =
00231                 &vidl2_color_converter<VIDL2_PIXEL_COLOR_RGBA,VIDL2_PIXEL_COLOR_MONO>::convert;
00232             return fp;
00233           }
00234         }
00235         case VIDL2_PIXEL_COLOR_RGB:
00236         {
00237           vidl2_color_conv_fptr fp =
00238               &vidl2_color_converter<VIDL2_PIXEL_COLOR_RGBA,VIDL2_PIXEL_COLOR_RGB>::convert;
00239           return fp;
00240         }
00241         case VIDL2_PIXEL_COLOR_RGBA:
00242         {
00243           vidl2_color_conv_fptr fp =
00244               &vidl2_color_converter<VIDL2_PIXEL_COLOR_RGBA,VIDL2_PIXEL_COLOR_RGBA>::convert;
00245           return fp;
00246         }
00247         case VIDL2_PIXEL_COLOR_YUV:
00248         {
00249           vidl2_color_conv_fptr fp =
00250               &vidl2_color_converter<VIDL2_PIXEL_COLOR_RGBA,VIDL2_PIXEL_COLOR_YUV>::convert;
00251           return fp;
00252         }
00253         default:
00254           break;
00255       }
00256       break;
00257     }
00258     case VIDL2_PIXEL_COLOR_YUV:
00259     {
00260       switch(out_C){
00261         case VIDL2_PIXEL_COLOR_MONO:
00262         {
00263           if(out_bpp == 1){
00264             vidl2_color_conv_fptr_8_1 fp =
00265                 &vidl2_color_converter<VIDL2_PIXEL_COLOR_YUV,VIDL2_PIXEL_COLOR_MONO>::convert;
00266             return reinterpret_cast<vidl2_color_conv_fptr>(fp);
00267           }
00268           else if(out_bpp == 16)
00269           {
00270             vidl2_color_conv_fptr_8_16 fp =
00271                 &vidl2_color_converter<VIDL2_PIXEL_COLOR_YUV,VIDL2_PIXEL_COLOR_MONO>::convert;
00272             return reinterpret_cast<vidl2_color_conv_fptr>(fp);
00273           }
00274           else
00275           {
00276             vidl2_color_conv_fptr fp =
00277                 &vidl2_color_converter<VIDL2_PIXEL_COLOR_YUV,VIDL2_PIXEL_COLOR_MONO>::convert;
00278             return fp;
00279           }
00280         }
00281         case VIDL2_PIXEL_COLOR_RGB:
00282         {
00283           vidl2_color_conv_fptr fp =
00284               &vidl2_color_converter<VIDL2_PIXEL_COLOR_YUV,VIDL2_PIXEL_COLOR_RGB>::convert;
00285           return fp;
00286         }
00287         case VIDL2_PIXEL_COLOR_RGBA:
00288         {
00289           vidl2_color_conv_fptr fp =
00290               &vidl2_color_converter<VIDL2_PIXEL_COLOR_YUV,VIDL2_PIXEL_COLOR_RGBA>::convert;
00291           return fp;
00292         }
00293         case VIDL2_PIXEL_COLOR_YUV:
00294         {
00295           vidl2_color_conv_fptr fp =
00296               &vidl2_color_converter<VIDL2_PIXEL_COLOR_YUV,VIDL2_PIXEL_COLOR_YUV>::convert;
00297           return fp;
00298         }
00299         default:
00300           break;
00301       }
00302       break;
00303     }
00304     default:
00305       break;
00306   }
00307   vcl_cerr << "No color conversion function available" << vcl_endl;
00308   return NULL;
00309 }

Generated on Wed Dec 3 05:21:02 2008 for contrib/brl/bbas/vidl2 by  doxygen 1.5.1