00001
00002 #include "vil_print.h"
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include <vxl_config.h>
00014 #include <vcl_complex.h>
00015 #include <vil/vil_rgb.h>
00016 #include <vil/vil_rgba.h>
00017
00018
00019 VCL_DEFINE_SPECIALIZATION
00020 void vil_print_value(vcl_ostream& os, const bool& value)
00021 {
00022 os<<int(value);
00023 }
00024
00025
00026 VCL_DEFINE_SPECIALIZATION
00027 void vil_print_value(vcl_ostream& os, const vxl_byte& value)
00028 {
00029 os.width(3);
00030 os<<int(value);
00031 }
00032
00033
00034 VCL_DEFINE_SPECIALIZATION
00035 void vil_print_value(vcl_ostream& os, const vxl_sbyte& value)
00036 {
00037 os.width(3);
00038 os<<int(value);
00039 }
00040
00041
00042 VCL_DEFINE_SPECIALIZATION
00043 void vil_print_value(vcl_ostream& os, const vxl_int_16& value)
00044 {
00045 int v=value;
00046 if (v<0) { v=-v; os<<'-'; } else os<<' ';
00047 if (v<10) os<<'0';
00048 if (v<100) os<<'0';
00049 if (v<1000) os<<'0';
00050 if (v<10000) os<<'0';
00051 os<<v;
00052 }
00053
00054
00055 VCL_DEFINE_SPECIALIZATION
00056 void vil_print_value(vcl_ostream& os, const vxl_uint_16& value)
00057 {
00058 if (value<10) os<<'0';
00059 if (value<100) os<<'0';
00060 if (value<1000) os<<'0';
00061 if (value<10000) os<<'0';
00062 os<<value;
00063 }
00064
00065
00066 VCL_DEFINE_SPECIALIZATION
00067 void vil_print_value(vcl_ostream& os, const vxl_int_32& value)
00068 {
00069 int v=value;
00070 if (v<0) { v=-v; os<<'-'; } else os<<' ';
00071 if (v<10) os<<'0';
00072 if (v<100) os<<'0';
00073 if (v<1000) os<<'0';
00074 if (v<10000) os<<'0';
00075 if (v<100000) os<<'0';
00076 if (v<1000000) os<<'0';
00077 if (v<10000000) os<<'0';
00078 os<<v;
00079 }
00080
00081
00082 VCL_DEFINE_SPECIALIZATION
00083 void vil_print_value(vcl_ostream& os, const vxl_uint_32& value)
00084 {
00085 if (value<10) os<<'0';
00086 if (value<100) os<<'0';
00087 if (value<1000) os<<'0';
00088 if (value<10000) os<<'0';
00089 if (value<100000) os<<'0';
00090 if (value<1000000) os<<'0';
00091 if (value<10000000) os<<'0';
00092 os<<value;
00093 }
00094
00095 #if VXL_HAS_INT_64
00096
00097
00098 VCL_DEFINE_SPECIALIZATION
00099 void vil_print_value(vcl_ostream& os, const vxl_uint_64& value)
00100 {
00101 #ifdef VCL_VC_6 // IMS. This Hack could be replaced by code which
00102 os << "****";
00103 #else
00104 if (value<10) os<<'0';
00105 if (value<100) os<<'0';
00106 if (value<1000) os<<'0';
00107 if (value<10000) os<<'0';
00108 if (value<100000) os<<'0';
00109 if (value<1000000) os<<'0';
00110 if (value<10000000) os<<'0';
00111 os<<value;
00112 #endif
00113 }
00114
00115
00116 VCL_DEFINE_SPECIALIZATION
00117 void vil_print_value(vcl_ostream& os, const vxl_int_64& value)
00118 {
00119 #ifdef VCL_VC_6 // IMS. This Hack could be replaced by code which
00120 os << "****";
00121 #else
00122 vxl_int_64 v=value;
00123 if (v<0) { v=-v; os<<'-'; } else os<<' ';
00124 if (v<10) os<<'0';
00125 if (v<100) os<<'0';
00126 if (v<1000) os<<'0';
00127 if (v<10000) os<<'0';
00128 if (v<100000) os<<'0';
00129 if (v<1000000) os<<'0';
00130 if (v<10000000) os<<'0';
00131 os<<v;
00132 #endif
00133 }
00134
00135 #endif
00136
00137
00138 VCL_DEFINE_SPECIALIZATION
00139 void vil_print_value(vcl_ostream& os, const float& value)
00140 {
00141 os<<value;
00142 }
00143
00144
00145 VCL_DEFINE_SPECIALIZATION
00146 void vil_print_value(vcl_ostream& os, const double& value)
00147 {
00148 os<<value;
00149 }
00150
00151
00152 VCL_DEFINE_SPECIALIZATION
00153 void vil_print_value(vcl_ostream& os, const vcl_complex<float>& value)
00154 {
00155 os<<value;
00156 }
00157
00158
00159 VCL_DEFINE_SPECIALIZATION
00160 void vil_print_value(vcl_ostream& os, const vcl_complex<double>& value)
00161 {
00162 os<<value;
00163 }
00164
00165
00166 VCL_DEFINE_SPECIALIZATION
00167 void vil_print_value(vcl_ostream& os, const vil_rgb<vxl_byte>& value)
00168 {
00169 int r = int(value.r);
00170 if (r<10) os<<'0';
00171 if (r<100) os<<'0';
00172 os<<r<<'/';
00173 int g = int(value.g);
00174 if (g<10) os<<'0';
00175 if (g<100) os<<'0';
00176 os<<g<<'/';
00177 int b = int(value.b);
00178 if (b<10) os<<'0';
00179 if (b<100) os<<'0';
00180 os<<b;
00181 }
00182
00183
00184 VCL_DEFINE_SPECIALIZATION
00185 void vil_print_value(vcl_ostream& os, vil_rgb<vxl_sbyte> const& value)
00186 {
00187 int r = int(value.r);
00188 if (r<0) r=-r,os<<'-'; else os<<'+';
00189 if (r<10) os<<'0';
00190 if (r<100) os<<'0';
00191 os<<r<<'/';
00192 int g = int(value.g);
00193 if (g<0) g=-g,os<<'-'; else os<<'+';
00194 if (g<10) os<<'0';
00195 if (g<100) os<<'0';
00196 os<<g<<'/';
00197 int b = int(value.b);
00198 if (b<0) b=-b,os<<'-'; else os<<'+';
00199 if (b<10) os<<'0';
00200 if (b<100) os<<'0';
00201 os<<b;
00202 }
00203
00204
00205 VCL_DEFINE_SPECIALIZATION
00206 void vil_print_value(vcl_ostream& os, const vil_rgb<vxl_int_16>& value)
00207 {
00208 vil_print_value(os, value.r);
00209 os<<'/';
00210 vil_print_value(os, value.g);
00211 os<<'/';
00212 vil_print_value(os, value.b);
00213 }
00214
00215
00216 VCL_DEFINE_SPECIALIZATION
00217 void vil_print_value(vcl_ostream& os, const vil_rgb<vxl_uint_16>& value)
00218 {
00219 vil_print_value(os, value.r);
00220 os<<'/';
00221 vil_print_value(os, value.g);
00222 os<<'/';
00223 vil_print_value(os, value.b);
00224 }
00225
00226
00227 VCL_DEFINE_SPECIALIZATION
00228 void vil_print_value(vcl_ostream& os, const vil_rgb<vxl_int_32>& value)
00229 {
00230 vil_print_value(os, value.r);
00231 os<<'/';
00232 vil_print_value(os, value.g);
00233 os<<'/';
00234 vil_print_value(os, value.b);
00235 }
00236
00237
00238 VCL_DEFINE_SPECIALIZATION
00239 void vil_print_value(vcl_ostream& os, const vil_rgb<vxl_uint_32>& value)
00240 {
00241 vil_print_value(os, value.r);
00242 os<<'/';
00243 vil_print_value(os, value.g);
00244 os<<'/';
00245 vil_print_value(os, value.b);
00246 }
00247
00248 #if VXL_HAS_INT_64
00249
00250
00251 VCL_DEFINE_SPECIALIZATION
00252 void vil_print_value(vcl_ostream& os, const vil_rgb<vxl_int_64>& value)
00253 {
00254 vil_print_value(os, value.r);
00255 os<<'/';
00256 vil_print_value(os, value.g);
00257 os<<'/';
00258 vil_print_value(os, value.b);
00259 }
00260
00261
00262 VCL_DEFINE_SPECIALIZATION
00263 void vil_print_value(vcl_ostream& os, const vil_rgb<vxl_uint_64>& value)
00264 {
00265 vil_print_value(os, value.r);
00266 os<<'/';
00267 vil_print_value(os, value.g);
00268 os<<'/';
00269 vil_print_value(os, value.b);
00270 }
00271
00272 #endif
00273
00274
00275 VCL_DEFINE_SPECIALIZATION
00276 void vil_print_value(vcl_ostream& os, const vil_rgb<float>& value)
00277 {
00278 os<<value.r<<'/'<<value.g<<'/'<<value.b;
00279 }
00280
00281
00282
00283 VCL_DEFINE_SPECIALIZATION
00284 void vil_print_value(vcl_ostream& os, const vil_rgb<double>& value)
00285 {
00286 os<<value.r<<'/'<<value.g<<'/'<<value.b;
00287 }
00288
00289
00290 VCL_DEFINE_SPECIALIZATION
00291 void vil_print_value(vcl_ostream& os, const vil_rgba<vxl_byte>& value)
00292 {
00293 int r = int(value.r);
00294 if (r<10) os<<'0';
00295 if (r<100) os<<'0';
00296 os<<r<<'/';
00297 int g = int(value.g);
00298 if (g<10) os<<'0';
00299 if (g<100) os<<'0';
00300 os<<g<<'/';
00301 int b = int(value.b);
00302 if (b<10) os<<'0';
00303 if (b<100) os<<'0';
00304 os<<b<<'/';
00305 int a = int(value.a);
00306 if (a<10) os<<'0';
00307 if (a<100) os<<'0';
00308 os<<a;
00309 }
00310
00311
00312 VCL_DEFINE_SPECIALIZATION
00313 void vil_print_value(vcl_ostream& os, const vil_rgba<vxl_sbyte>& value)
00314 {
00315 int r = int(value.r);
00316 if (r<0) r=-r,os<<'-'; else os<<'+';
00317 if (r<10) os<<'0';
00318 if (r<100) os<<'0';
00319 os<<r<<'/';
00320 int g = int(value.g);
00321 if (g<0) g=-g,os<<'-'; else os<<'+';
00322 if (g<10) os<<'0';
00323 if (g<100) os<<'0';
00324 os<<g<<'/';
00325 int b = int(value.b);
00326 if (b<0) b=-b,os<<'-'; else os<<'+';
00327 if (b<10) os<<'0';
00328 if (b<100) os<<'0';
00329 os<<b<<'/';
00330 int a = int(value.a);
00331 if (a<0) a=-a,os<<'-'; else os<<'+';
00332 if (a<10) os<<'0';
00333 if (a<100) os<<'0';
00334 os<<a;
00335 }
00336
00337
00338 VCL_DEFINE_SPECIALIZATION
00339 void vil_print_value(vcl_ostream& os, const vil_rgba<vxl_int_16>& value)
00340 {
00341 vil_print_value(os, value.r);
00342 os<<'/';
00343 vil_print_value(os, value.g);
00344 os<<'/';
00345 vil_print_value(os, value.b);
00346 os<<'/';
00347 vil_print_value(os, value.a);
00348 }
00349
00350
00351 VCL_DEFINE_SPECIALIZATION
00352 void vil_print_value(vcl_ostream& os, const vil_rgba<vxl_uint_16>& value)
00353 {
00354 vil_print_value(os, value.r);
00355 os<<'/';
00356 vil_print_value(os, value.g);
00357 os<<'/';
00358 vil_print_value(os, value.b);
00359 os<<'/';
00360 vil_print_value(os, value.a);
00361 }
00362
00363
00364 VCL_DEFINE_SPECIALIZATION
00365 void vil_print_value(vcl_ostream& os, const vil_rgba<vxl_int_32>& value)
00366 {
00367 vil_print_value(os, value.r);
00368 os<<'/';
00369 vil_print_value(os, value.g);
00370 os<<'/';
00371 vil_print_value(os, value.b);
00372 os<<'/';
00373 vil_print_value(os, value.a);
00374 }
00375
00376
00377 VCL_DEFINE_SPECIALIZATION
00378 void vil_print_value(vcl_ostream& os, const vil_rgba<vxl_uint_32>& value)
00379 {
00380 vil_print_value(os, value.r);
00381 os<<'/';
00382 vil_print_value(os, value.g);
00383 os<<'/';
00384 vil_print_value(os, value.b);
00385 os<<'/';
00386 vil_print_value(os, value.a);
00387 }
00388
00389 #if VXL_HAS_INT_64
00390
00391
00392 VCL_DEFINE_SPECIALIZATION
00393 void vil_print_value(vcl_ostream& os, const vil_rgba<vxl_int_64>& value)
00394 {
00395 vil_print_value(os, value.r);
00396 os<<'/';
00397 vil_print_value(os, value.g);
00398 os<<'/';
00399 vil_print_value(os, value.b);
00400 os<<'/';
00401 vil_print_value(os, value.a);
00402 }
00403
00404
00405 VCL_DEFINE_SPECIALIZATION
00406 void vil_print_value(vcl_ostream& os, const vil_rgba<vxl_uint_64>& value)
00407 {
00408 vil_print_value(os, value.r);
00409 os<<'/';
00410 vil_print_value(os, value.g);
00411 os<<'/';
00412 vil_print_value(os, value.b);
00413 os<<'/';
00414 vil_print_value(os, value.a);
00415 }
00416
00417 #endif
00418
00419
00420 VCL_DEFINE_SPECIALIZATION
00421 void vil_print_value(vcl_ostream& os, const vil_rgba<float>& value)
00422 {
00423 os<<value.r<<'/'<<value.g<<'/'<<value.b<<'/'<<value.a;
00424 }
00425
00426
00427 VCL_DEFINE_SPECIALIZATION
00428 void vil_print_value(vcl_ostream& os, const vil_rgba<double>& value)
00429 {
00430 os<<value.r<<'/'<<value.g<<'/'<<value.b<<'/'<<value.a;
00431 }
00432
00433 void vil_print_all(vcl_ostream& os, vil_image_view_base_sptr const& view)
00434 {
00435 #define docase(T) \
00436 case T: \
00437 vil_print_all(os, static_cast<vil_image_view< vil_pixel_format_type_of<T >::type > >(view) );\
00438 break
00439
00440 switch ( view->pixel_format() )
00441 {
00442 #if VXL_HAS_INT_64
00443 docase( VIL_PIXEL_FORMAT_UINT_64 );
00444 docase( VIL_PIXEL_FORMAT_INT_64 );
00445 #endif
00446 docase( VIL_PIXEL_FORMAT_UINT_32 );
00447 docase( VIL_PIXEL_FORMAT_INT_32 );
00448 docase( VIL_PIXEL_FORMAT_UINT_16 );
00449 docase( VIL_PIXEL_FORMAT_INT_16 );
00450 docase( VIL_PIXEL_FORMAT_BYTE );
00451 docase( VIL_PIXEL_FORMAT_SBYTE );
00452 docase( VIL_PIXEL_FORMAT_FLOAT );
00453 docase( VIL_PIXEL_FORMAT_DOUBLE );
00454 docase( VIL_PIXEL_FORMAT_BOOL );
00455
00456 #if VXL_HAS_INT_64
00457 docase( VIL_PIXEL_FORMAT_RGB_UINT_64 );
00458 docase( VIL_PIXEL_FORMAT_RGB_INT_64 );
00459 #endif
00460 docase( VIL_PIXEL_FORMAT_RGB_UINT_32 );
00461 docase( VIL_PIXEL_FORMAT_RGB_INT_32 );
00462 docase( VIL_PIXEL_FORMAT_RGB_UINT_16 );
00463 docase( VIL_PIXEL_FORMAT_RGB_INT_16 );
00464 docase( VIL_PIXEL_FORMAT_RGB_BYTE );
00465 docase( VIL_PIXEL_FORMAT_RGB_SBYTE );
00466 docase( VIL_PIXEL_FORMAT_RGB_FLOAT );
00467 docase( VIL_PIXEL_FORMAT_RGB_DOUBLE );
00468
00469 #if VXL_HAS_INT_64
00470 docase( VIL_PIXEL_FORMAT_RGBA_UINT_64 );
00471 docase( VIL_PIXEL_FORMAT_RGBA_INT_64 );
00472 #endif
00473 docase( VIL_PIXEL_FORMAT_RGBA_UINT_32 );
00474 docase( VIL_PIXEL_FORMAT_RGBA_INT_32 );
00475 docase( VIL_PIXEL_FORMAT_RGBA_UINT_16 );
00476 docase( VIL_PIXEL_FORMAT_RGBA_INT_16 );
00477 docase( VIL_PIXEL_FORMAT_RGBA_BYTE );
00478 docase( VIL_PIXEL_FORMAT_RGBA_SBYTE );
00479 docase( VIL_PIXEL_FORMAT_RGBA_FLOAT );
00480 docase( VIL_PIXEL_FORMAT_RGBA_DOUBLE );
00481
00482 docase( VIL_PIXEL_FORMAT_COMPLEX_FLOAT );
00483 docase( VIL_PIXEL_FORMAT_COMPLEX_DOUBLE );
00484
00485 default: ;
00486 }
00487 #undef docase
00488 }