00001 // This is core/vil1/vil1_memory_image_of_format.txx 00002 #ifndef vil1_memory_image_of_format_h_ 00003 #define vil1_memory_image_of_format_h_ 00004 //: 00005 // \file 00006 // \author Andrew W. Fitzgibbon, Oxford RRG 00007 // \date 21 Feb 2000 00008 // fsm: moved from vil1_memory_image_of.txx to allow clients to specialize 00009 // the traits after the standard ones in here, but before first use in 00010 // there. 00011 // 00012 //----------------------------------------------------------------------------- 00013 00014 #include <vcl_climits.h> // for CHAR_BIT, number of bits in a char. 00015 #include <vcl_complex_fwd.h> 00016 00017 #include <vil1/vil1_memory_image.h> 00018 #include <vil1/vil1_rgb.h> 00019 #include <vil1/vil1_rgba.h> 00020 00021 #include <vxl_config.h> 00022 00023 //: Map from Types to image formats 00024 template <class T> 00025 struct vil1_memory_image_of_format : public vil1_memory_image_format 00026 { 00027 protected: 00028 // A protection error here means you haven't derived 00029 // the vil1_memory_image_format<T> for a vil1_memory_image_of<T> 00030 vil1_memory_image_of_format(); 00031 }; 00032 00033 VCL_DEFINE_SPECIALIZATION 00034 struct vil1_memory_image_of_format<float> : public vil1_memory_image_format 00035 { 00036 vil1_memory_image_of_format() 00037 { 00038 components = 1; 00039 bits_per_component = sizeof(float)*CHAR_BIT; 00040 component_format = VIL1_COMPONENT_FORMAT_IEEE_FLOAT; 00041 } 00042 }; 00043 00044 VCL_DEFINE_SPECIALIZATION 00045 struct vil1_memory_image_of_format<double> : public vil1_memory_image_format 00046 { 00047 vil1_memory_image_of_format() 00048 { 00049 components = 1; 00050 bits_per_component = sizeof(double)*CHAR_BIT; 00051 component_format = VIL1_COMPONENT_FORMAT_IEEE_FLOAT; 00052 } 00053 }; 00054 00055 VCL_DEFINE_SPECIALIZATION 00056 struct vil1_memory_image_of_format<vcl_complex<float> > : public vil1_memory_image_format 00057 { 00058 vil1_memory_image_of_format() 00059 { 00060 components = 2; 00061 bits_per_component = 32; 00062 component_format = VIL1_COMPONENT_FORMAT_IEEE_FLOAT; 00063 } 00064 }; 00065 00066 VCL_DEFINE_SPECIALIZATION 00067 struct vil1_memory_image_of_format<vcl_complex<double> > : public vil1_memory_image_format 00068 { 00069 vil1_memory_image_of_format() 00070 { 00071 components = 2; 00072 bits_per_component = 64; 00073 component_format = VIL1_COMPONENT_FORMAT_IEEE_FLOAT; 00074 } 00075 }; 00076 00077 VCL_DEFINE_SPECIALIZATION 00078 struct vil1_memory_image_of_format<signed char> : public vil1_memory_image_format 00079 { 00080 vil1_memory_image_of_format() 00081 { 00082 components = 1; 00083 bits_per_component = CHAR_BIT; 00084 component_format = VIL1_COMPONENT_FORMAT_SIGNED_INT; 00085 } 00086 }; 00087 00088 VCL_DEFINE_SPECIALIZATION 00089 struct vil1_memory_image_of_format<bool> : public vil1_memory_image_format 00090 { 00091 vil1_memory_image_of_format() 00092 { 00093 components = 1; 00094 bits_per_component = sizeof(bool)*CHAR_BIT; // ugh! this is 32 on gcc -- fsm. 00095 component_format = VIL1_COMPONENT_FORMAT_UNSIGNED_INT; 00096 } 00097 }; 00098 00099 VCL_DEFINE_SPECIALIZATION 00100 struct vil1_memory_image_of_format<unsigned char> : public vil1_memory_image_format 00101 { 00102 vil1_memory_image_of_format() 00103 { 00104 components = 1; 00105 bits_per_component = CHAR_BIT; 00106 component_format = VIL1_COMPONENT_FORMAT_UNSIGNED_INT; 00107 } 00108 }; 00109 00110 VCL_DEFINE_SPECIALIZATION 00111 struct vil1_memory_image_of_format<unsigned short> : public vil1_memory_image_format 00112 { 00113 vil1_memory_image_of_format() 00114 { 00115 components = 1; 00116 bits_per_component = sizeof(short)*CHAR_BIT; 00117 component_format = VIL1_COMPONENT_FORMAT_UNSIGNED_INT; 00118 } 00119 }; 00120 00121 VCL_DEFINE_SPECIALIZATION 00122 struct vil1_memory_image_of_format<signed short> : public vil1_memory_image_format 00123 { 00124 vil1_memory_image_of_format() 00125 { 00126 components = 1; 00127 bits_per_component = sizeof(short)*CHAR_BIT; 00128 component_format = VIL1_COMPONENT_FORMAT_SIGNED_INT; 00129 } 00130 }; 00131 00132 VCL_DEFINE_SPECIALIZATION 00133 struct vil1_memory_image_of_format<signed int> : public vil1_memory_image_format 00134 { 00135 vil1_memory_image_of_format() 00136 { 00137 components = 1; 00138 bits_per_component = sizeof(int)*CHAR_BIT; 00139 component_format = VIL1_COMPONENT_FORMAT_SIGNED_INT; 00140 } 00141 }; 00142 00143 VCL_DEFINE_SPECIALIZATION 00144 struct vil1_memory_image_of_format<unsigned int> : public vil1_memory_image_format 00145 { 00146 vil1_memory_image_of_format() 00147 { 00148 components = 1; 00149 bits_per_component = sizeof(int)*CHAR_BIT; 00150 component_format = VIL1_COMPONENT_FORMAT_UNSIGNED_INT; 00151 } 00152 }; 00153 00154 VCL_DEFINE_SPECIALIZATION 00155 struct vil1_memory_image_of_format<vil1_rgb<unsigned char> > : public vil1_memory_image_format 00156 { 00157 vil1_memory_image_of_format() 00158 { 00159 components = 3; 00160 bits_per_component = CHAR_BIT; 00161 component_format = VIL1_COMPONENT_FORMAT_UNSIGNED_INT; 00162 } 00163 }; 00164 00165 VCL_DEFINE_SPECIALIZATION 00166 struct vil1_memory_image_of_format<vil1_rgb<vxl_uint_16> > : public vil1_memory_image_format 00167 { 00168 vil1_memory_image_of_format() 00169 { 00170 components = 3; 00171 bits_per_component = 16; 00172 component_format = VIL1_COMPONENT_FORMAT_UNSIGNED_INT; 00173 } 00174 }; 00175 00176 VCL_DEFINE_SPECIALIZATION 00177 struct vil1_memory_image_of_format<vil1_rgb<float> > : public vil1_memory_image_format 00178 { 00179 vil1_memory_image_of_format() 00180 { 00181 components = 3; 00182 bits_per_component = 32; 00183 component_format = VIL1_COMPONENT_FORMAT_IEEE_FLOAT; 00184 } 00185 }; 00186 00187 VCL_DEFINE_SPECIALIZATION 00188 struct vil1_memory_image_of_format<vil1_rgba<float> > : public vil1_memory_image_format 00189 { 00190 vil1_memory_image_of_format() 00191 { 00192 components = 4; 00193 bits_per_component = 32; 00194 component_format = VIL1_COMPONENT_FORMAT_IEEE_FLOAT; 00195 } 00196 }; 00197 00198 VCL_DEFINE_SPECIALIZATION 00199 struct vil1_memory_image_of_format<vil1_rgb<double> > : public vil1_memory_image_format 00200 { 00201 vil1_memory_image_of_format() 00202 { 00203 components = 3; 00204 bits_per_component = 64; 00205 component_format = VIL1_COMPONENT_FORMAT_IEEE_FLOAT; 00206 } 00207 }; 00208 00209 #endif // vil1_memory_image_of_format_h_
1.5.1