00001
00002 #ifndef vil1_memory_image_of_txx_
00003 #define vil1_memory_image_of_txx_
00004
00005
00006
00007
00008
00009
00010 #include "vil1_memory_image_of.h"
00011 #include <vcl_cassert.h>
00012 #include <vil1/vil1_memory_image_of_format.txx>
00013
00014 template <class T>
00015 vil1_memory_image_of<T>::vil1_memory_image_of():
00016 vil1_memory_image()
00017 {
00018 }
00019
00020 template <class T>
00021 vil1_memory_image_of<T>::vil1_memory_image_of(vil1_memory_image_of<T> const & that):
00022 vil1_memory_image(that)
00023 {
00024 }
00025
00026 template <class T>
00027 vil1_memory_image_of<T>::vil1_memory_image_of(vil1_image const& image):
00028 vil1_memory_image(image)
00029 {
00030 assert(image.components() == components());
00031 assert(image.bits_per_component() == bits_per_component());
00032 assert(image.component_format() == component_format());
00033
00034
00035 }
00036
00037 template <class T>
00038 vil1_memory_image_of<T>::vil1_memory_image_of(int sizex, int sizey):
00039 vil1_memory_image(1, sizex, sizey, vil1_memory_image_of_format<T>())
00040 {
00041 }
00042
00043
00044
00045 template <class T>
00046 vil1_memory_image_of<T>::vil1_memory_image_of(T *buf, int sizex, int sizey):
00047 vil1_memory_image(buf, 1, sizex, sizey, vil1_memory_image_of_format<T>())
00048 {
00049 }
00050
00051 #if 0 // this method was removed
00052 template <class T>
00053 vil1_memory_image_of<T>::vil1_memory_image_of(int sizex, int sizey, T const& value):
00054 vil1_memory_image(1, sizex, sizey, vil1_memory_image_of_format<T>())
00055 {
00056 T *p = (T*)get_buffer();
00057 T *e = p + planes() * width() * height();
00058 while (p != e)
00059 *p++ = value;
00060 }
00061 #endif
00062
00063 template <class T>
00064 void vil1_memory_image_of<T>::set(vil1_image const& image)
00065 {
00066 resize(image.width(), image.height());
00067 image.get_section(get_buffer(), 0, 0, width(), height());
00068 }
00069
00070 template <class T>
00071 vil1_memory_image_of<T>& vil1_memory_image_of<T>::operator=(vil1_memory_image_of<T> const &that)
00072 {
00073 vil1_memory_image::operator=(that);
00074 return *this;
00075 }
00076
00077 template <class T>
00078 vil1_memory_image_of<T>& vil1_memory_image_of<T>::operator=(vil1_image const &that)
00079 {
00080 assert((that.bits_per_component() * that.components()+7)/8 == sizeof (T));
00081 vil1_memory_image::operator=(that);
00082 return *this;
00083 }
00084
00085 template <class T>
00086 void vil1_memory_image_of<T>::resize(int width, int height)
00087 {
00088 if (ptr)
00089 vil1_memory_image::resize(width, height);
00090 else
00091 *this = vil1_memory_image_of<T>(width, height);
00092 }
00093
00094 template <class T>
00095 void vil1_memory_image_of<T>::resize(int planes, int width, int height)
00096 {
00097 assert(ptr);
00098 vil1_memory_image::resize(planes, width, height);
00099 }
00100
00101 template <class T>
00102 void vil1_memory_image_of<T>::fill(T const& v)
00103 {
00104 int w = width();
00105 int h = height();
00106 for (int y=0; y<h; ++y) {
00107 T* raster = (*this)[y];
00108 for (int x=0; x<w; ++x)
00109 raster[x] = v;
00110 }
00111 }
00112
00113 #define VIL1_MEMORY_IMAGE_OF_INSTANTIATE(T) \
00114 template class vil1_memory_image_of<T >
00115
00116 #endif // vil1_memory_image_of_txx_