Commit 92ddec6d authored by Nicolas Neri's avatar Nicolas Neri
Browse files

Fix fill for border in sandbox.

	* border_fill.cc: Test file of fill border with println_with_border.
	* border_fill.hh: Fix fill for border, but need to be optimize.

git-svn-id: https://svn.lrde.epita.fr/svn/oln/trunk@1118 4aad255d-cdde-0310-9447-f3009e2ae8c0
parent f3ceaba8
2007-09-17 Guillaume Duhamel <guillaume.duhamel@lrde.epita.fr>
Fix fill for border in sandbox.
* border_fill.cc: Test file of fill border with println_with_border.
* border_fill.hh: Fix fill for border, but need to be optimize.
2007-09-17 Simon Nivault <simon.nivault@lrde.epita.fr> 2007-09-17 Simon Nivault <simon.nivault@lrde.epita.fr>
Add vector and trait for binary Add vector and trait for binary
......
// Copyright (C) 2007 EPITA Research and Development Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
// of the GNU General Public License version 2 as published by the
// Free Software Foundation.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this library; see the file COPYING. If not, write to
// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
// Boston, MA 02111-1307, USA.
//
// As a special exception, you may use this file as part of a free
// software library without restriction. Specifically, if other files
// instantiate templates or use macros or inline functions from this
// file, or you compile this file and link it with other files to
// produce an executable, this file does not by itself cause the
// resulting executable to be covered by the GNU General Public
// License. This exception does not however invalidate any other
// reasons why the executable file might be covered by the GNU General
// Public License.
/*! \file tests/border_fill.cc
*
* \brief Tests on mln::border::fill.
*/
#include "border_fill.hh"
#include <mln/core/image2d_b.hh>
#include <mln/value/int_u8.hh>
#include <mln/pw/all.hh>
#include <mln/debug/println_with_border.hh>
using namespace mln;
int
main (void)
{
image2d_b<value::int_u8> i1(9, 7);
border::fill (i1, 8);
debug::println_with_border(i1);
}
// Copyright (C) 2007 EPITA Research and Development Laboratory
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
// of the GNU General Public License version 2 as published by the
// Free Software Foundation.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this library; see the file COPYING. If not, write to
// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
// Boston, MA 02111-1307, USA.
//
// As a special exception, you may use this file as part of a free
// software library without restriction. Specifically, if other files
// instantiate templates or use macros or inline functions from this
// file, or you compile this file and link it with other files to
// produce an executable, this file does not by itself cause the
// resulting executable to be covered by the GNU General Public
// License. This exception does not however invalidate any other
// reasons why the executable file might be covered by the GNU General
// Public License.
#ifndef MLN_BORDER_FILL_HH
# define MLN_BORDER_FILL_HH
/*! \file mln/border/fill.hh
*
* \brief FIXME.
*/
# include <mln/core/concept/image.hh>
# include <mln/core/internal/fixme.hh>
# include <mln/level/memset_.hh>
//# include <mln/core/line_piter.hh>
#include <mln/geom/nrows.hh>
#include <mln/geom/ncols.hh>
#include <mln/core/image2d_b.hh>
#include <mln/core/image2d_b.hh>
#include <mln/core/pixel.hh>
namespace mln
{
namespace border
{
/*! Fill the virtual (outer) border of image \p ima with the
* single value \p v.
*
* \param[in,out] ima The image whose border is to be filled.
* \param[in] v The value to assign to all border pixels.
*
* \pre \p ima has to be initialized.
*
* \todo Implement it + optimize with memset if possible.
*/
template <typename I>
void fill(const Fast_Image<I>& ima, const mln_value(I)& v);
# ifndef MLN_INCLUDE_ONLY
template <typename I>
void fill(const Fast_Image<I>& ima_, const mln_value(I)& v)
{
const I& ima = exact(ima_);
mln_precondition(ima.has_data());
// FIX
typedef mln_point(I) point;
typedef mln_dpoint(I) delta_point;
Fast_Image<I> im (ima);
// internal::fixme();
std::size_t border = ima.border ();
std::size_t nbrows = geom::max_row(ima) - geom::min_row(ima);
std::size_t nbcols = geom::max_col(ima) - geom::min_col(ima);
mln_value(I) tmp;
tmp = v;
point2d p = ima.bbox ().pmin ();
// FIXME : REMOVE THIS LOOP BY MEMSET
for (std::size_t i = 0; i < border * (2 * (border + 1) + nbcols); ++i)
const_cast<I&>(ima)[i] = v;
// ACCESS TO RIGHT UP CORNER
for (std::size_t i = 0; i < nbcols + 1; ++i)
p = p + right;
// FILL BORDER
for (std::size_t i = 0; i < nbrows; ++i)
{
level::memset_(const_cast<I&>(ima), p, v, 2 * border);
p = p + down;
}
// FILL THE BOTTOM OF BORDER
level::memset_(const_cast<I&>(ima), p, v, border * (2 * (border + 1) + nbcols));
// END FIX
}
# endif // ! MLN_INCLUDE_ONLY
} // end of namespace mln::border
} // end of namespace mln
#endif // ! MLN_BORDER_FILL_HH
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment