triskele/include/ArrayTree/Border.tpp
Git Merciol f687310939 modifié : CMakeLists.txt
modifié :         CMakeListsOTB.txt
	modifié :         LICENSE
	modifié :         MakefileNoOTB
	modifié :         Readme.html
	modifié :         Readme.txt
	modifié :         include/Appli/Option.hpp
	modifié :         include/Appli/Selected.hpp
	modifié :         include/Appli/Selected.tpp
	modifié :         include/ArrayTree/ArrayTreeBuilder.hpp
	modifié :         include/ArrayTree/ArrayTreeBuilder.tpp
	modifié :         include/ArrayTree/Border.hpp
	modifié :         include/ArrayTree/Border.tpp
	modifié :         include/ArrayTree/GraphWalker.hpp
	modifié :         include/ArrayTree/GraphWalker.tpp
	modifié :         include/ArrayTree/Leader.hpp
	modifié :         include/ArrayTree/Leader.tpp
	modifié :         include/ArrayTree/Weight.hpp
	modifié :         include/ArrayTree/Weight.tpp
	modifié :         include/ArrayTree/triskeleArrayTreeBase.hpp
	modifié :         include/ArrayTree/triskeleArrayTreeBase.tpp
	modifié :         include/ArrayTree/triskeleSort.hpp
	modifié :         include/ArrayTree/triskeleSort.tpp
	modifié :         include/AttributeProfiles.hpp
	modifié :         include/AttributeProfiles.tpp
	modifié :         include/Attributes/AreaAttributes.hpp
	modifié :         include/Attributes/AreaAttributes.tpp
	modifié :         include/Attributes/AverageAttributes.hpp
	modifié :         include/Attributes/AverageAttributes.tpp
	modifié :         include/Attributes/MoIAttributes.hpp
	modifié :         include/Attributes/MoIAttributes.tpp
	modifié :         include/Attributes/SDAttributes.hpp
	modifié :         include/Attributes/SDAttributes.tpp
	modifié :         include/Attributes/WeightAttributes.hpp
	modifié :         include/Attributes/WeightAttributes.tpp
	modifié :         include/Attributes/XYAttributes.hpp
	modifié :         include/Attributes/XYAttributes.tpp
	modifié :         include/CompAttribute.hpp
	modifié :         include/CompAttribute.tpp
	modifié :         include/IImage.hpp
	modifié :         include/IImage.tpp
	modifié :         include/QuadTree/QuadTreeBuilder.hpp
	modifié :         include/Tree.hpp
	modifié :         include/Tree.tpp
	modifié :         include/TreeBuilder.hpp
	modifié :         include/TreeBuilder.tpp
	modifié :         include/TreeStats.hpp
	modifié :         include/TreeStats.tpp
	modifié :         include/XMLTree/XMLTreeBuilder.hpp
	modifié :         include/triskeleBase.hpp
	modifié :         include/triskeleBase.tpp
	modifié :         include/triskeleDealThreads.hpp
	modifié :         include/triskeleDealThreads.tpp
	modifié :         include/triskeleDebug.hpp
	modifié :         include/triskeleGdalGetType.hpp
	modifié :         otb-module.cmake
	modifié :         src/Appli/Option.cpp
	modifié :         src/Appli/Selected.cpp
	modifié :         src/ArrayTree/triskeleArrayTreeBase.cpp
	modifié :         src/CMakeLists.txt
	modifié :         src/IImage.cpp
	modifié :         src/PerfArrayTreeBuilder.cpp
	modifié :         src/QuadTree/QuadTreeBuilder.cpp
	modifié :         src/TestArrayTreeBuilder.cpp
	modifié :         src/Tree.cpp
	modifié :         src/TreeStats.cpp
	modifié :         src/XMLTree/XMLTreeBuilder.cpp
	modifié :         src/apGenerator.cpp
	modifié :         src/triskeleBase.cpp
	modifié :         src/triskeleDebug.cpp
2018-04-02 19:25:37 +02:00

128 lines
2.7 KiB
C++

#ifndef _OTB_TRISKELE_ARRAY_TREE_BORDER_TPP
#define _OTB_TRISKELE_ARRAY_TREE_BORDER_TPP
inline DimImg
Border::getPixelsCount (const Size &size) {
return DimImg (size.width)*DimImg (size.height);
}
inline DimImg
Border::getMapLength (DimImg pixelsCount) {
return (pixelsCount+7)/8;
}
inline bool
Border::isBorder (DimImg idx) const {
BOOST_ASSERT (idx < pixelsCount);
return map.size () ? map[idx/8] & (1 << (idx%8)) : defaultVal;
}
inline bool
Border::isBorder (const Point &p) const {
BOOST_ASSERT (p.x < size.width && p.y < size.height);
return isBorder (point2idx (size, p));
}
inline void
Border::clearBorder (DimImg idx) {
if (!map.size ())
createMap ();
BOOST_ASSERT (idx < pixelsCount);
map[idx/8] &= ~(1 << (idx%8));
}
inline void
Border::clearBorder (const Point &p) {
clearBorder (point2idx (size, p));
}
inline void
Border::setBorder (DimImg idx) {
if (!map.size ())
createMap ();
BOOST_ASSERT (idx < pixelsCount);
map[idx/8] |= (1 << (idx%8));
}
inline void
Border::setBorder (const Point &p) {
setBorder (point2idx (size, p));
}
inline
Border::Border ()
: pixelsCount (0),
mapLength (0),
size (),
map (),
defaultVal (false) {
}
inline
Border::Border (const Size &size, bool defaultVal)
: pixelsCount (getPixelsCount (size)),
size (size),
mapLength (getMapLength (pixelsCount)),
map (),
defaultVal (defaultVal) {
}
inline
Border::Border (const Border &border, const Rect &tile)
: size (tile.width, tile.height),
pixelsCount (getPixelsCount (size)),
mapLength (getMapLength (pixelsCount)),
map (),
defaultVal (border.defaultVal) {
if (!border.map.size ())
return;
// XXX todo
// width >= 8 => for bytes
// width < 8 => for bits
BOOST_ASSERT (false);
}
inline
Border::~Border () {
}
inline void
Border::reset (bool defaultVal) {
this->defaultVal = defaultVal;
map.clear ();
}
inline void
Border::createMap () {
map.assign (mapLength, defaultVal ? 0xFF : 0);
if (!(mapLength && defaultVal))
return;
map[mapLength-1] &= 0xFF >> (8-(pixelsCount%8))%8;
}
inline const Size &
Border::getSize () const {
return size;
}
inline DimImg
Border::borderCount () {
DimImg result = 0;
for (DimImg i = 0; i < mapLength; ++i)
result += bitCount[map[i]];
return result;
}
inline ostream &operator << (ostream &out, const Border &border) {
if (border.size.width > printMapMaxSide || border.size.height > printMapMaxSide) {
return out << "map too big to print!" << std::endl;
}
for (DimSideImg y = 0, idx = 0; y < border.size.height; ++y) {
for (DimSideImg x = 0; x < border.size.width; ++x, ++idx)
out << (border.isBorder (idx) ? " B " : " - ");
out << endl;
}
return out;
}
#endif // _OTB_TRISKELE_ARRAY_TREE_BORDER_HPP