00001
00002 #include "vidl2_color.h"
00003
00004
00005
00006
00007
00008 #include <vcl_iostream.h>
00009
00010
00011
00012
00013
00014
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
00027
00028
00029
00030
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 }