2 * This program is free software: you can redistribute it and/or modify
3 * it under the terms of the GNU Lesser General Public License as
4 * published by the Free Software Foundation, either version 3 of the
5 * License, or (at your option) any later version.
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
12 * You should have received a copy of the GNU General Public License
13 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 * @file MagickReader.ih
19 * @author David Coeurjolly (\c david.coeurjolly@liris.cnrs.fr )
20 * Laboratoire d'InfoRmatique en Image et Systèmes d'information - LIRIS (CNRS, UMR 5205), CNRS, France
24 * Implementation of inline methods defined in MagickReader.h
26 * This file is part of the DGtal library.
30 //////////////////////////////////////////////////////////////////////////////
32 //////////////////////////////////////////////////////////////////////////////
34 ///////////////////////////////////////////////////////////////////////////////
35 // Interface - public :
37 template <typename TImageContainer, typename TFunctor>
40 DGtal::MagickReader<TImageContainer, TFunctor>::importImage(const std::string & filename,
41 const Functor & aFunctor, bool topbotomOrder )
44 const Magick::PixelPacket *cacheRead;
45 DGtal::IOException dgtalio;
47 Magick::InitializeMagick(NULL);
53 img.read ( filename );
57 std::cout << "MagickReader : can't open " << filename << std::endl;
61 w = img.size().width();
62 h = img.size().height();
64 //@todo Check Magick::Types according to ValueType
65 img.type ( Magick::TrueColorType );
67 cacheRead = img.getConstPixels ( 0, 0, w, h );
69 //@todo check ImageMagick errors.
70 //trace.error() << "MagickReader : can't open "<< filename<<endl;
72 typename TImageContainer::Point firstPoint;
73 typename TImageContainer::Point lastPoint;
75 firstPoint = TImageContainer::Point::zero;
79 typename TImageContainer::Domain domain(firstPoint,lastPoint);
80 TImageContainer image(domain);
83 typename TImageContainer::Domain::ConstIterator it = domain.begin(),
86 for(; it != itend; ++it)
88 const Magick::PixelPacket *pixel = cacheRead + w * ((topbotomOrder)? ( h - 1 - (*it)[1] ): (*it)[1] ) + (*it)[0];
89 Color col(pixel->red,pixel->green,pixel->blue);
90 image.setValue( (*it), aFunctor(col) );