DGtal 1.4.0
Loading...
Searching...
No Matches
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
Domain domain

References domain, 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();
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();
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();
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
static void drawImage(DGtal::Board2D &board, const Image &i, const typename Image::Value &minV, const typename Image::Value &maxV)

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

Referenced by main().