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 #include <mln/core/image/image2d.hh>
00027 #include <mln/win/rectangle2d.hh>
00028
00029 #include <mln/value/rgb8.hh>
00030 #include <mln/value/rgb16.hh>
00031
00032 #include <mln/io/ppm/load.hh>
00033 #include <mln/io/ppm/save.hh>
00034
00035 #include <mln/data/compare.hh>
00036
00037 #include "tests/data.hh"
00038
00039
00040 using namespace mln;
00041
00042 struct to16bits : mln::Function_v2v<to16bits>
00043 {
00044
00045 typedef value::rgb16 result;
00046 result operator()(value::rgb8 v) const
00047 {
00048 result ret(v.red().to_enc() * 256,
00049 v.green().to_enc() * 256,
00050 v.blue().to_enc() * 256);
00051 return ret;
00052 }
00053 };
00054
00055 struct to8bits : mln::Function_v2v<to8bits>
00056 {
00057
00058 typedef value::rgb8 result;
00059 result operator()(value::rgb16 v) const
00060 {
00061 result ret(v.red().to_enc() / 256,
00062 v.green().to_enc() / 256,
00063 v.blue().to_enc() / 256);
00064 return ret;
00065 }
00066 };
00067
00068 int main()
00069 {
00070 using namespace mln;
00071 using value::rgb8;
00072 using value::rgb16;
00073
00074 typedef image2d<rgb8> I;
00075
00076 {
00077
00078 image2d<rgb8> a = io::ppm::load<rgb8>(MLN_IMG_DIR "/lena.ppm");
00079 image2d<rgb16> b(a.domain());
00080
00081 image2d<rgb8>::fwd_piter p(b.domain());
00082
00083
00084 to16bits f;
00085 for_all(p)
00086 b(p) = f(a(p));
00087 io::ppm::save(b, "out16.ppm");
00088
00089
00090 image2d<rgb16> c = io::ppm::load<rgb16>("out16.ppm");
00091 image2d<rgb8> d(a.domain());
00092
00093
00094
00095 to8bits g;
00096 for_all(p)
00097 d(p) = g(c(p));
00098 io::ppm::save(d, "out8.ppm");
00099
00100
00101 mln_assertion(d == a);
00102 }
00103
00104 {
00105
00106
00107
00108
00109 image2d< value::rgb<16> > b;
00110 io::ppm::load(b, MLN_IMG_DIR "/lena_16.ppm");
00111
00112 }
00113
00114 {
00115
00116
00117
00118
00119
00120
00121
00122
00123 image2d< value::rgb<16> > a =
00124 io::ppm::load< value::rgb<16> >(MLN_IMG_DIR "/lena_16.ppm");
00125
00126 image2d< value::rgb<8> > b =
00127 io::ppm::load< value::rgb<8> >(MLN_IMG_DIR "/lena.ppm");
00128 }
00129 }