• Main Page
  • Related Pages
  • Modules
  • Namespaces
  • Classes
  • Files
  • File List

split.hh

00001 // Copyright (C) 2010 EPITA Research and Development Laboratory (LRDE)
00002 //
00003 // This file is part of Olena.
00004 //
00005 // Olena is free software: you can redistribute it and/or modify it under
00006 // the terms of the GNU General Public License as published by the Free
00007 // Software Foundation, version 2 of the License.
00008 //
00009 // Olena is distributed in the hope that it will be useful,
00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012 // General Public License for more details.
00013 //
00014 // You should have received a copy of the GNU General Public License
00015 // along with Olena.  If not, see <http://www.gnu.org/licenses/>.
00016 //
00017 // As a special exception, you may use this file as part of a free
00018 // software project without restriction.  Specifically, if other files
00019 // instantiate templates or use macros or inline functions from this
00020 // file, or you compile this file and link it with other files to produce
00021 // an executable, this file does not by itself cause the resulting
00022 // executable to be covered by the GNU General Public License.  This
00023 // exception does not however invalidate any other reasons why the
00024 // executable file might be covered by the GNU General Public License.
00025 
00026 #ifndef MLN_DATA_SPLIT_HH
00027 # define MLN_DATA_SPLIT_HH
00028 
00029 # include <mln/core/concept/image.hh>
00030 # include <mln/value/rgb8.hh>
00031 
00037 
00038 namespace mln
00039 {
00040 
00041   namespace data
00042   {
00043 
00044       template <typename I, typename J>
00045       void
00046       split(const Image<I>& input_, Image<J>& r_, Image<J>& g_, Image<J>& b_);
00047 
00048 
00049 # ifndef MLN_INCLUDE_ONLY
00050 
00051 
00052       template <typename I, typename J>
00053       void
00054       split(const Image<I>& input_, Image<J>& r_, Image<J>& g_, Image<J>& b_)
00055       {
00056         trace::entering("mln::data::split");
00057 
00058         const I& input = exact(input_);
00059         J& r = exact(r_);
00060         J& g = exact(g_);
00061         J& b = exact(b_);
00062 
00063         mln_assertion(input.is_valid());
00064         mlc_is(mln_value(I), value::rgb8)::check();
00065         // FIXME: add more checks.
00066         mlc_is(mln_trait_image_value_storage(I),
00067                trait::image::value_storage::one_block)::check();
00068 
00069         initialize(r, input);
00070         initialize(g, input);
00071         initialize(b, input);
00072 
00073         typedef const mln_value(I)* in_ptr_t;
00074         typedef mln_value(J)* out_ptr_t;
00075 
00076         in_ptr_t in_ptr = input.buffer();
00077         out_ptr_t
00078           r_ptr = r.buffer(),
00079           g_ptr = g.buffer(),
00080           b_ptr = b.buffer();
00081 
00082         for (unsigned n = 0; n < input.nelements(); ++n, ++in_ptr)
00083         {
00084           *r_ptr++ = in_ptr->red();
00085           *g_ptr++ = in_ptr->green();
00086           *b_ptr++ = in_ptr->blue();
00087         }
00088 
00089         trace::exiting("mln::data::split");
00090       }
00091 
00092 
00093 # endif // ! MLN_INCLUDE_ONLY
00094 
00095   } // end of namespace mln::data
00096 
00097 } // end of namespace mln
00098 
00099 #endif // ! MLN_DATA_SPLIT_HH

Generated on Tue Oct 4 2011 15:24:39 for Milena (Olena) by  doxygen 1.7.1