27 #ifndef MLN_CORE_IMAGE_VMORPH_CAST_IMAGE_HH
28 # define MLN_CORE_IMAGE_VMORPH_CAST_IMAGE_HH
37 # include <mln/core/internal/image_value_morpher.hh>
38 # include <mln/value/set.hh>
39 # include <mln/value/cast.hh>
46 template <
typename T,
typename I>
struct cast_image_;
54 template <
typename T,
typename I>
55 struct data< cast_image_<
T,I> >
68 template <
typename T,
typename I,
typename value_io>
72 typedef trait::image::vw_io::none
vw_io;
73 typedef trait::image::vw_set::none
vw_set;
76 template <
typename T,
typename I>
80 typedef trait::image::vw_io::read
vw_io;
83 template <
typename T,
typename I>
87 typedef trait::image::vw_io::read
vw_io;
90 template <
typename T,
typename I>
95 typedef mlc_equal(mln_trait_value_quant(
T),
96 trait::value::quant::high) is_high_quant_;
98 typedef mlc_if(is_high_quant_,
99 trait::image::quant::high,
100 trait::image::quant::low)
quant;
102 typedef trait::image::category::value_morpher
category;
103 typedef trait::image::value_io::read_only
value_io;
104 typedef trait::image::pw_io::read
pw_io;
105 typedef trait::image::value_access::indirect
value_access;
108 typedef trait::image::ext_domain::none
ext_domain;
119 template <
typename T,
typename I>
151 template <
typename T,
typename I>
155 mln_precondition(
exact(ima).is_valid());
161 # ifndef MLN_INCLUDE_ONLY
169 template <
typename T,
typename I>
180 template <
typename T,
typename I>
182 cast_image_<T,I>::cast_image_(
const Image<I>& ima)
184 mln_precondition(
exact(ima).is_valid());
185 this->data_ =
new internal::data< cast_image_<T,I> >(
exact(ima));
188 template <
typename T,
typename I>
191 cast_image_<T,I>::init_(
const Image<I>& ima)
193 mln_precondition(
exact(ima).is_valid());
194 this->data_ =
new internal::data<cast_image_<T,I> >(
exact(ima));
197 template <
typename T,
typename I>
200 cast_image_<T,I>::operator()(
const mln_psite(I)& p)
const
202 mln_precondition(this->data_->ima_.has(p));
203 return mln::value::cast<T>( this->data_->ima_(p) );
206 template <
typename T,
typename I>
209 cast_image_<T,I>::operator()(
const mln_psite(I)& p)
211 return mln::value::cast<T>( this->data_->ima_(p) );
214 # endif // ! MLN_INCLUDE_ONLY
219 #endif // ! MLN_CORE_IMAGE_VMORPH_CAST_IMAGE_HH