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