STE-Industries: utilities testing
Bitmap.inl
Go to the documentation of this file.
1 
14 namespace GraphicSpace
15 {
16 
33 
35  Bitmap& Image, unsigned int Row, unsigned int Column)
36  noexcept
37  {
38  if (not Image.ValidIndex(Row, Column))
39  return false;
40  Index = static_cast<uint_least32_t>(Image.MakeIndex(Row, Column));
41  return true;
42  }
43 
63 
65  unsigned int Row, unsigned int Column) noexcept
66  {
67  NumberOfNeighbours = 0;
68  if (Neighbour [NumberOfNeighbours].SetLink(Image, Row - 1, Column - 1))
69  ++NumberOfNeighbours;
70  if (Neighbour [NumberOfNeighbours].SetLink(Image, Row - 1, Column))
71  ++NumberOfNeighbours;
72  if (Neighbour [NumberOfNeighbours].SetLink(Image, Row - 1, Column + 1))
73  ++NumberOfNeighbours;
74  if (Neighbour [NumberOfNeighbours].SetLink(Image, Row, Column - 1))
75  ++NumberOfNeighbours;
76  if (Neighbour [NumberOfNeighbours].SetLink(Image, Row, Column + 1))
77  ++NumberOfNeighbours;
78  if (Neighbour [NumberOfNeighbours].SetLink(Image, Row + 1, Column - 1))
79  ++NumberOfNeighbours;
80  if (Neighbour [NumberOfNeighbours].SetLink(Image, Row + 1, Column))
81  ++NumberOfNeighbours;
82  if (Neighbour [NumberOfNeighbours].SetLink(Image, Row + 1, Column + 1))
83  ++NumberOfNeighbours;
84  }
85 
112 
114  Bitmap& Image, register const uint8_t* ColorPointer,
115  register IndexType PixelIndex,
116  register const uint_least32_t
117  OrthogonalAttraction [UINT8_MAX + 1], register const
118  uint_least32_t DiagonalAttraction [UINT8_MAX + 1])
119  noexcept
120  {
121  register unsigned int Index;
122 
123  for (Index = 0; Index < NumberOfNeighbours; ++Index)
124  Neighbour [Index].Attraction =
125  (Image.IsOrthogonal(Index, Neighbour [Index].Index)?
126  OrthogonalAttraction: DiagonalAttraction)
127  [abs(ColorPointer [PixelIndex] -
128  ColorPointer [Neighbour [Index].Index])];
129  }
130 
142 
143 inline void Bitmap::AllocateImage(void) noexcept
144  {
145  register unsigned int Color;
146 
147  for (Color = 0; Color < NUMBER_OF_COLORS; ++Color)
148  PixelPointer [Color] =
149  BitmapSize == 0? nullptr: new uint8_t [BitmapSize];
150  }
151 
163 
164 inline void Bitmap::DestroyImage(void) noexcept
165  {
166  register unsigned int Color;
167 
168  for (Color = 0; Color < NUMBER_OF_COLORS; ++Color)
169  if (PixelPointer [Color] != nullptr)
170  delete [] PixelPointer [Color];
171  }
172 
185 
186 inline bool Bitmap::ValidIndex(unsigned int Row, unsigned int Column) const
187  noexcept
188  {
189  return Row < Height and Column < Width;
190  }
191 
209 
210 inline Bitmap::IndexType Bitmap::MakeIndex(unsigned int Row,
211  unsigned int Column) const noexcept
212  {
213  assert(Row < Height);
214  assert(Column < Width);
215  return static_cast<IndexType>(Row) * Width + Column;
216  }
217 
234 
235 inline bool Bitmap::IsOrthogonal(IndexType FirstIndex,
236  IndexType SecondIndex) const noexcept
237  {
238  if (FirstIndex >= SecondIndex)
239  FirstIndex -= SecondIndex;
240  else
241  FirstIndex = SecondIndex - FirstIndex;
242  return FirstIndex == 1 or FirstIndex == Width;
243  }
244 
264 
265 inline uint_fast32_t Bitmap::RoundedDivide(uint_fast32_t Dividend,
266  uint_fast32_t Divisor) noexcept
267  {
268  return (Dividend + Divisor / 2) / Divisor;
269  }
270 
291 
292 inline uint_fast32_t Bitmap::LoadInteger(const uint8_t Buffer [],
293  unsigned int Size) noexcept
294  {
295  switch (Size)
296  {
297  case SHORT_DATA_SIZE:
298  return static_cast<uint_fast32_t>(Buffer [0]) bitor
299  (static_cast<uint_fast32_t>(Buffer [1]) <<
300  CHAR_BIT);
301  case LONG_DATA_SIZE:
302  return static_cast<uint_fast32_t>(Buffer [0]) bitor
303  (static_cast<uint_fast32_t>(Buffer [1]) <<
304  CHAR_BIT) bitor
305  (static_cast<uint_fast32_t>(Buffer [2]) <<
306  (CHAR_BIT * 2)) bitor
307  (static_cast<uint_fast32_t>(Buffer [3]) <<
308  (CHAR_BIT * 3));
309  default:
310  assert(false);
311  return 0;
312  }
313  }
314 
336 
337 inline void Bitmap::StoreInteger(uint8_t Buffer [], uint_fast32_t Value,
338  unsigned int Size) noexcept
339  {
340  assert(Size == SHORT_DATA_SIZE or Size == LONG_DATA_SIZE);
341  Buffer [0] = static_cast<uint8_t>(Value);
342  Buffer [1] = static_cast<uint8_t>(Value >> CHAR_BIT);
343  if (Size == LONG_DATA_SIZE)
344  {
345  Buffer [2] = static_cast<uint8_t>(Value >> (CHAR_BIT * 2));
346  Buffer [3] = static_cast<uint8_t>(Value >> (CHAR_BIT * 3));
347  }
348  }
349 
362 
363 inline uint_fast32_t Bitmap::GetWidth(void) const noexcept
364  {
365  return Width;
366  }
367 
380 
381 inline uint_fast32_t Bitmap::GetHeight(void) const noexcept
382  {
383  return Height;
384  }
385 
398 
399 inline uint_fast32_t Bitmap::GetSize(void) const noexcept
400  {
401  return BitmapSize;
402  }
403 
416 
417 inline unsigned int Bitmap::GetBitsPerPixel(void) const noexcept
418  {
419  return BitsPerPixel;
420  }
421 
434 
435 inline uint_fast32_t Bitmap::GetHorizontalResolution(void) const noexcept
436  {
437  return HorizontalResolution;
438  }
439 
452 
453 inline uint_fast32_t Bitmap::GetVerticalResolution(void) const noexcept
454  {
455  return VerticalResolution;
456  }
457 
467 
468 inline uint_fast32_t Bitmap::ComputeLineSize(void) const noexcept
469  {
470  return (Width * BitsPerPixel + CHAR_BIT * sizeof(uint32_t) - 1) /
471  (CHAR_BIT * sizeof(uint32_t)) * sizeof(uint32_t);
472  }
473 
490 
491 inline void Bitmap::Randomize(uint_fast32_t Seed [RandomGenerator::
492  NUMBER_OF_GENERATORS + 1]) noexcept
493  {
494  register unsigned int Index;
495 
496  Generator.SetSeed(Seed);
497  for (Index = 0; Index < INITIAL_GENERATION; ++Index)
499  }
500 
501 }
GraphicSpace::Bitmap::LoadInteger
static uint_fast32_t LoadInteger(const uint8_t Buffer[], unsigned int Size) noexcept
Definition: Bitmap.inl:292
GraphicSpace::Bitmap::DestroyImage
void DestroyImage(void) noexcept
Definition: Bitmap.inl:164
GraphicSpace::Bitmap::MakeIndex
IndexType MakeIndex(unsigned int Row, unsigned int Column) const noexcept
Definition: Bitmap.inl:210
GraphicSpace::Bitmap::PixelInformationType::SetAttraction
void SetAttraction(register const Bitmap &Image, register const uint8_t *ColorPointer, register IndexType PixelIndex, register const uint_least32_t OrthogonalAttraction[UINT8_MAX+1], register const uint_least32_t DiagonalAttraction[UINT8_MAX+1]) noexcept
Definition: Bitmap.inl:113
GraphicSpace::Bitmap::PixelPointer
uint8_t * PixelPointer[NUMBER_OF_COLORS]
Definition: Bitmap.h:486
GraphicSpace::Bitmap::ComputeLineSize
uint_fast32_t ComputeLineSize(void) const noexcept
Definition: Bitmap.inl:468
GraphicSpace::Bitmap::GetWidth
uint_fast32_t GetWidth(void) const noexcept
Definition: Bitmap.inl:363
GraphicSpace::Bitmap::ValidIndex
bool ValidIndex(unsigned int Row, unsigned int Column) const noexcept
Definition: Bitmap.inl:186
GraphicSpace::RandomGenerator
Definition: RandomGenerator.h:31
GraphicSpace::Bitmap::HorizontalResolution
uint_fast32_t HorizontalResolution
Definition: Bitmap.h:478
GraphicSpace::Bitmap::PixelInformationType::Neighbour
NeighbourType Neighbour[NUMBER_OF_NEIGHBOURS]
Definition: Bitmap.h:365
GraphicSpace::Bitmap::LONG_DATA_SIZE
static constexpr unsigned int LONG_DATA_SIZE
Definition: Bitmap.h:42
GraphicSpace::Bitmap::GetSize
uint_fast32_t GetSize(void) const noexcept
Definition: Bitmap.inl:399
GraphicSpace::Bitmap::PixelInformationType::NeighbourType::SetLink
bool SetLink(const Bitmap &Image, unsigned int Row, unsigned int Colum) noexcept
Definition: Bitmap.inl:34
GraphicSpace::Bitmap::StoreInteger
static void StoreInteger(uint8_t Buffer[], uint_fast32_t Value, unsigned int Size) noexcept
Definition: Bitmap.inl:337
GraphicSpace::Bitmap::RoundedDivide
static uint_fast32_t RoundedDivide(uint_fast32_t Dividend, uint_fast32_t Divisor) noexcept
Definition: Bitmap.inl:265
GraphicSpace::RandomGenerator::Generate
uint_fast32_t Generate(uint_fast32_t Maximum) noexcept
Definition: RandomGenerator.inl:160
GraphicSpace::Bitmap::Randomize
void Randomize(uint_fast32_t Seed[RandomGenerator::NUMBER_OF_GENERATORS+1]) noexcept
Definition: Bitmap.inl:491
GraphicSpace::Bitmap::PixelInformationType::NeighbourType::Index
uint_least32_t Index
Definition: Bitmap.h:340
GraphicSpace::Bitmap::PixelInformationType::NumberOfNeighbours
unsigned int NumberOfNeighbours
Definition: Bitmap.h:359
GraphicSpace::Bitmap::IsOrthogonal
bool IsOrthogonal(IndexType FirstIndex, IndexType SecondIndex) const noexcept
Definition: Bitmap.inl:235
GraphicSpace::Bitmap::SHORT_DATA_SIZE
static constexpr unsigned int SHORT_DATA_SIZE
Definition: Bitmap.h:38
GraphicSpace::Bitmap::GetVerticalResolution
uint_fast32_t GetVerticalResolution(void) const noexcept
Definition: Bitmap.inl:453
GraphicSpace::Bitmap::BitmapSize
uint_fast32_t BitmapSize
Definition: Bitmap.h:470
GraphicSpace::Bitmap::AllocateImage
void AllocateImage(void) noexcept
Definition: Bitmap.inl:143
GraphicSpace::Bitmap::INITIAL_GENERATION
static constexpr unsigned int INITIAL_GENERATION
Definition: Bitmap.h:240
GraphicSpace::Bitmap::BitsPerPixel
uint16_t BitsPerPixel
Definition: Bitmap.h:474
GraphicSpace::Bitmap::GetBitsPerPixel
unsigned int GetBitsPerPixel(void) const noexcept
Definition: Bitmap.inl:417
GraphicSpace::Bitmap::PixelInformationType::SetLinks
void SetLinks(const Bitmap &Image, unsigned int Row, unsigned int Colum) noexcept
Definition: Bitmap.inl:64
GraphicSpace::Bitmap::VerticalResolution
uint_fast32_t VerticalResolution
Definition: Bitmap.h:482
GraphicSpace
Definition: Bitmap.cpp:29
GraphicSpace::Bitmap::GetHeight
uint_fast32_t GetHeight(void) const noexcept
Definition: Bitmap.inl:381
GraphicSpace::Bitmap::NUMBER_OF_COLORS
static constexpr unsigned int NUMBER_OF_COLORS
Definition: Bitmap.h:114
GraphicSpace::Bitmap::IndexType
uint_fast32_t IndexType
Definition: Bitmap.h:155
IgnoreValue
#define IgnoreValue(Expression)
Definition: Graphic.h:55
GraphicSpace::Bitmap
Definition: Bitmap.h:32
GraphicSpace::Bitmap::GetHorizontalResolution
uint_fast32_t GetHorizontalResolution(void) const noexcept
Definition: Bitmap.inl:435
GraphicSpace::RandomGenerator::SetSeed
void SetSeed(const uint_fast32_t Seed[NUMBER_OF_GENERATORS+1]) noexcept
Definition: RandomGenerator.inl:80
GraphicSpace::Bitmap::Generator
RandomGenerator Generator
Definition: Bitmap.h:514
GraphicSpace::Bitmap::Width
uint_fast32_t Width
Definition: Bitmap.h:462
GraphicSpace::Bitmap::Height
uint_fast32_t Height
Definition: Bitmap.h:466