DGtal  1.5.beta
exampleArrayImageAdapter.cpp File Reference

An example file for ArrayImageAdapter. More...

#include <iostream>
#include <DGtal/base/Common.h>
#include <DGtal/helpers/StdDefs.h>
#include <DGtal/io/boards/Board2D.h>
#include <new>
#include <cmath>
#include <algorithm>
#include <DGtal/io/colormaps/HueShadeColorMap.h>
#include <DGtal/images/ImageContainerBySTLVector.h>
#include <DGtal/images/ArrayImageAdapter.h>
Include dependency graph for exampleArrayImageAdapter.cpp:

Go to the source code of this file.

Functions

void ArrayImageAdapter_example ()
 
void moduleImages_example ()
 
int main ()
 

Detailed Description

An example file for ArrayImageAdapter.

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program 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 program. If not, see http://www.gnu.org/licenses/.

Author
Roland Denis (rolan.nosp@m.d.de.nosp@m.nis@u.nosp@m.niv-.nosp@m.smb.f.nosp@m.r ) LAboratory of MAthematics - LAMA (CNRS, UMR 5127), University of Savoie, France
Date
2015/10/14

This file is part of the DGtal library.

Definition in file exampleArrayImageAdapter.cpp.

Function Documentation

◆ ArrayImageAdapter_example()

void ArrayImageAdapter_example ( )

[ArrayImageAdapter_example]

[ArrayImageAdapter_example]

Definition at line 52 of file exampleArrayImageAdapter.cpp.

53 {
55  using Space = SpaceND<2>;
57  using Point = Domain::Point;
58  using Value = double;
59 
60  const Domain domain( Point(0, 1), Point(4, 3) );
61 
62  Value* data = new Value[ domain.size() ];
63 
64  // Convert this allocated memory to a CImage model.
65  ArrayImageAdapter< Value*, Domain > image( data, domain );
66  // Alternative syntax using the helpers:
67  // auto image = makeArrayImageAdapterFromIterator( data, domain );
68 
69  // Fill the image with first coordinate of the point
70  for ( auto it = image.begin(); it != image.end(); ++it )
71  {
72  *it = it.getPoint()[0];
73  }
74 
75  // Get a constant view on a sub-domain.
76  const Domain sub_domain( Point(1, 1), Point(3, 2) );
77  ArrayImageAdapter< Value const*, Domain > cst_image( data, domain, sub_domain );
78  // Alternative syntax using the helpers:
79  // auto const cst_image = makeArrayImageAdapterFromImage( image, sub_domain );
80 
81  // Display it.
82  for ( auto value : cst_image )
83  {
84  std::cout << value << " ";
85  }
86  std::cout << std::endl;
88 }
MyPointD Point
Definition: testClone2.cpp:383
Domain domain
Image image(domain)

References domain, image(), and DGtal::HyperRectDomain< TSpace >::size().

Referenced by main().

◆ main()

int main ( void  )

Definition at line 208 of file exampleArrayImageAdapter.cpp.

209 {
212  return 0;
213 }
void moduleImages_example()
void ArrayImageAdapter_example()

References ArrayImageAdapter_example(), and moduleImages_example().

◆ moduleImages_example()

void moduleImages_example ( )

[def]

[def]

[raw_image_creation]

[raw_image_creation]

[image_filling]

[image_filling]

[ConstArrayImageAdapterForSubImage_creation]

[ConstArrayImageAdapterForSubImage_creation]

[ArrayImageAdapterForSubImage_creation]

[ArrayImageAdapterForSubImage_creation]

[ArrayImageAdapterForSubImage_alternateCreation]

[ArrayImageAdapterForSubImage_alternateCreation]

[ArrayImageAdapterForSubImage_modifByDomain]

[ArrayImageAdapterForSubImage_modifByDomain]

[ArrayImageAdapterForSubImage_modifByImage]

[ArrayImageAdapterForSubImage_modifByImage]

[ImageSTL_creation]

[ImageSTL_creation]

[ArrayImageAdapterFromImageSTL]

[ArrayImageAdapterFromImageSTL]

[ArrayImageAdapterFromImageSTL_alternate]

[ArrayImageAdapterFromImageSTL_alternate]

[ArrayImageAdapterFromImageSTL_copy]

[ArrayImageAdapterFromImageSTL_copy]

Definition at line 90 of file exampleArrayImageAdapter.cpp.

91 {
92  using namespace Z2i;
93 
94  Board2D aBoard;
95 
97  using Value = double; // value type of the image
98  using HueShadeDouble = HueShadeColorMap<Value>; // a simple HueShadeColorMap varying on 'double' values
100 
101  trace.beginBlock("image");
102 
104  const Domain domain(Point(1,1), Point(16,16));
105  Value* data = new Value[ domain.size() ];
106  ArrayImageAdapter< Value*, Domain > image( data, domain );
108 
110  Value i = 0;
111  for ( auto & value : image )
112  value = i++;
114 
115  aBoard.clear();
116  Display2DFactory::drawImage<HueShadeDouble>(aBoard, image, 0, domain.size()-1);
117  aBoard.saveSVG("ArrayImageAdapter_image.svg");
118 
119  trace.endBlock();
120 
121  trace.beginBlock("subImage");
122 
124  Domain subDomain(Point(1,1), Point(8,8));
125  ArrayImageAdapter< Value const*, Domain > constSubImage( data, domain, subDomain );
127 
128  aBoard.clear();
129  Display2DFactory::drawImage<HueShadeDouble>(aBoard, constSubImage, 0, domain.size()-1);
130  aBoard.saveSVG("ArrayImageAdapter_subImage.svg");
131 
132  trace.endBlock();
133 
134  trace.beginBlock("modifying subImage through domain iterator");
135  {
137  ArrayImageAdapter< Value*, Domain > subImage( data, domain, subDomain );
139  }
140 
142  auto subImage = makeArrayImageAdapterFromIterator( data, domain, subDomain );
144 
145 
147  for ( auto point : subImage.domain() )
148  {
149  Value coord = (point - Point(4,4)).norm();
150  subImage.setValue( point, 25*(cos(coord)+1) );
151  }
153 
154  aBoard.clear();
155  Display2DFactory::drawImage<HueShadeDouble>(aBoard, image, 0, domain.size()-1);
156  aBoard.saveSVG("ArrayImageAdapter_subImage_modifByDomain.svg");
157 
158  trace.endBlock();
159 
160  trace.beginBlock("modifying subImage through image iterator");
162  for ( auto it = subImage.begin(), it_end = subImage.end(); it != it_end; ++it )
163  {
164  Value coord = (it.getPoint() - Point(4,4)).norm();
165  *it = 25*(sin(coord)+1);
166  }
168 
169  aBoard.clear();
170  Display2DFactory::drawImage<HueShadeDouble>(aBoard, image, 0, domain.size()-1);
171  aBoard.saveSVG("ArrayImageAdapter_subImage_modifByImage.svg");
172 
173  trace.endBlock();
174 
175  trace.beginBlock("subImage from an ImageContainerBySTLVector");
178  for (auto& value : anIterableImage)
179  value = 0;
181 
183  {
184  ArrayImageAdapter< ImageContainerBySTLVector<Domain,Value>::Iterator, Domain > subImageSTL( anIterableImage.begin(), domain, subDomain );
185  }
187 
189  auto subImageSTL = makeArrayImageAdapterFromImage( anIterableImage, subDomain );
191 
192  trace.endBlock();
193 
194  trace.beginBlock("using std::copy on ArrayImageAdapter");
196  std::copy( subImage.cbegin(), subImage.cend(), subImageSTL.begin() );
198 
199  aBoard.clear();
200  Display2DFactory::drawImage<HueShadeDouble>(aBoard, anIterableImage, 0, domain.size()-1);
201  aBoard.saveSVG("ArrayImageAdapter_subImage_copyToImageSTL.svg");
202 
203  trace.endBlock();
204 
205  delete[] data;
206 }
Aim: This class specializes a 'Board' class so as to display DGtal objects more naturally (with <<)....
Definition: Board2D.h:71
Aim: This class template may be used to (linearly) convert scalar values in a given range into a colo...
void beginBlock(const std::string &keyword="")
double endBlock()
void clear(const DGtal::Color &color=DGtal::Color::None)
Definition: Board.cpp:151
void saveSVG(const char *filename, PageSize size=Board::BoundingBox, double margin=10.0) const
Definition: Board.cpp:1011
ArrayImageAdapter< TArrayIterator, TDomain > makeArrayImageAdapterFromIterator(TArrayIterator anArrayIterator, TDomain const &aFullDomain, TDomain const &aViewDomain)
ArrayImageAdapter< decltype(((TImage *) nullptr) ->begin()), TDomain > makeArrayImageAdapterFromImage(TImage &anImage, TDomain const &aViewDomain)
Trace trace
Definition: Common.h:153

References DGtal::Trace::beginBlock(), LibBoard::Board::clear(), domain, DGtal::Trace::endBlock(), image(), DGtal::makeArrayImageAdapterFromImage(), DGtal::makeArrayImageAdapterFromIterator(), LibBoard::Board::saveSVG(), DGtal::HyperRectDomain< TSpace >::size(), and DGtal::trace.

Referenced by main().