1 // This is core/vil/vil_print.h 2 #ifndef vil_print_h_ 3 #define vil_print_h_ 4 //: 5 // \file 6 // \author Ian Scott, Tim Cootes. 7 8 #include <iomanip> 9 #include <iostream> 10 #include "vil_image_view.h" 11 #ifdef _MSC_VER 12 # include <vcl_msvc_warnings.h> 13 #endif 14 15 //: How to print value in vil_print_all(image_view) 16 // \relatesalso vil_image_view 17 template<class T> 18 void vil_print_value(std::ostream& s, const T& value, unsigned=0); 19 20 // Specializations must be declared before use, so they need to be 21 // declared here. 22 23 #ifndef DOXYGEN_SHOULD_SKIP_THIS 24 25 #define vil_print_declare_specialization( T ) \ 26 template <> \ 27 void vil_print_value(std::ostream& os, const T & value, unsigned) 28 29 vil_print_declare_specialization( bool ); 30 vil_print_declare_specialization( vxl_byte ); 31 vil_print_declare_specialization( vxl_sbyte ); 32 vil_print_declare_specialization( vxl_int_16 ); 33 vil_print_declare_specialization( vxl_uint_16 ); 34 vil_print_declare_specialization( vxl_int_32 ); 35 vil_print_declare_specialization( vxl_uint_32 ); 36 #if VXL_HAS_INT_64 37 vil_print_declare_specialization( vxl_int_64 ); 38 vil_print_declare_specialization( vxl_uint_64 ); 39 #endif 40 vil_print_declare_specialization( float ); 41 vil_print_declare_specialization( double ); 42 vil_print_declare_specialization( std::complex<float> ); 43 vil_print_declare_specialization( std::complex<double> ); 44 vil_print_declare_specialization( vil_rgb<vxl_byte> ); 45 vil_print_declare_specialization( vil_rgb<vxl_sbyte> ); 46 vil_print_declare_specialization( vil_rgb<vxl_int_16> ); 47 vil_print_declare_specialization( vil_rgb<vxl_uint_16> ); 48 vil_print_declare_specialization( vil_rgb<vxl_int_32> ); 49 vil_print_declare_specialization( vil_rgb<vxl_uint_32> ); 50 #if VXL_HAS_INT_64 51 vil_print_declare_specialization( vil_rgb<vxl_int_64> ); 52 vil_print_declare_specialization( vil_rgb<vxl_uint_64> ); 53 #endif 54 vil_print_declare_specialization( vil_rgb<float> ); 55 vil_print_declare_specialization( vil_rgb<double> ); 56 vil_print_declare_specialization( vil_rgba<vxl_byte> ); 57 vil_print_declare_specialization( vil_rgba<vxl_sbyte> ); 58 vil_print_declare_specialization( vil_rgba<vxl_int_16> ); 59 vil_print_declare_specialization( vil_rgba<vxl_uint_16> ); 60 vil_print_declare_specialization( vil_rgba<vxl_int_32> ); 61 vil_print_declare_specialization( vil_rgba<vxl_uint_32> ); 62 #if VXL_HAS_INT_64 63 vil_print_declare_specialization( vil_rgba<vxl_int_64> ); 64 vil_print_declare_specialization( vil_rgba<vxl_uint_64> ); 65 #endif 66 vil_print_declare_specialization( vil_rgba<float> ); 67 vil_print_declare_specialization( vil_rgba<double> ); 68 69 #undef vil_print_declare_specialization 70 71 #endif // DOXYGEN_SHOULD_SKIP_THIS 72 73 74 //: Print all image data to os in a grid (rounds output to int) 75 // \relatesalso vil_image_view 76 template<class T> 77 inline void vil_print_all(std::ostream& os,const vil_image_view<T>& view, unsigned width=0) 78 { 79 if (!width) width = static_cast<unsigned>(os.width()); 80 os<<view.is_a()<<' '<<view.nplanes()<<" planes, each "<<view.ni()<<" x "<<view.nj() 81 <<" istep: "<<(int)view.istep()<<' ' 82 <<" jstep: "<<(int)view.jstep()<<' ' 83 <<" planestep: "<<(int)view.planestep()<<'\n' << std::flush; 84 for (unsigned int p=0;p<view.nplanes();++p) 85 { 86 if (view.nplanes()>1) os<<"Plane "<<p<<":\n" << std::flush; 87 for (unsigned int j=0;j<view.nj();++j) 88 { 89 for (unsigned int i=0;i<view.ni();++i) 90 { 91 os<<' '<<std::setw(width); 92 vil_print_value(os,view(i,j,p), width); 93 } 94 os<<'\n'<<std::flush; 95 } 96 } 97 } 98 99 //: Print all image data to os in a grid 100 // \relatesalso vil_image_view 101 void vil_print_all(std::ostream& os, vil_image_view_base_sptr const& view); 102 103 #endif // vil_print_h_ 104