00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef OLENA_IO_PNM_WRITE_3D_HH
00029 # define OLENA_IO_PNM_WRITE_3D_HH
00030
00031 # include <ntg/bin.hh>
00032 # include <oln/core/image2d.hh>
00033 # include <oln/io/pnm_write_2d.hh>
00034
00035 # include <list>
00036 # include <iostream>
00037 # include <cstdio>
00038
00039 namespace oln {
00040
00041 namespace io {
00042
00043 namespace internal {
00044
00045
00046
00047
00048
00057 template <pnm_type P, class I>
00058 struct pnm_writer<WritePnmRaw, 3, P, I>
00059 {
00060 typedef pnm_writer<WritePnmRaw, 2, P, image2d<oln_value_type(I)> >
00061 writer_2d;
00062 typedef image2d<oln_value_type(I)> image2d_type;
00063
00064 static std::string
00065 name()
00066 {
00067 return writer_2d::name();
00068 }
00069
00070 static bool
00071 knows_ext(const std::string& ext)
00072 {
00073 return writer_2d::knows_ext(ext);
00074 }
00075
00077
00078 static bool
00079 write(std::ostream& out, const I& im)
00080 {
00081 for (int slice = 0; slice < im.nslices(); ++slice)
00082 {
00083 image2d_type tmp_2d (im.nrows(), im.ncols());
00084 for (int row = 0; row < im.nrows(); ++row)
00085 for (int col = 0; col < im.ncols(); ++col)
00086 tmp_2d(row,col) = im(slice, row, col);
00087 if (!writer_2d::write(out, tmp_2d))
00088 return false;
00089 }
00090 return true;
00091 }
00092 };
00093
00094 }
00095
00096 }
00097
00098 }
00099
00100 #endif // ! OLENA_IO_PNM_WRITE_3D_HH