farm-ng-core
layout.h
Go to the documentation of this file.
1 // Copyright (c) 2011, Hauke Strasdat
2 // Copyright (c) 2012, Steven Lovegrove
3 // Copyright (c) 2021, farm-ng, inc.
4 //
5 // Use of this source code is governed by an MIT-style
6 // license that can be found in the LICENSE file or at
7 // https://opensource.org/licenses/MIT.
8 
9 #pragma once
10 
11 #include "sophus/common/common.h"
12 #include "sophus/concepts/image.h"
14 
15 #include <Eigen/Dense>
16 
17 #include <iostream>
18 
19 namespace sophus {
20 
21 /// Layout of the image: width, height and pitch in bytes.
22 ///
23 class ImageLayout {
24  public:
25  ImageLayout() = default;
26 
27  explicit ImageLayout(ImageSize image_size, size_t pitch_bytes)
28  : image_size_(image_size), pitch_bytes_(pitch_bytes) {}
29 
30  explicit ImageLayout(int width, int height, size_t pitch_bytes)
31  : image_size_(ImageSize(width, height)), pitch_bytes_(pitch_bytes) {}
32 
33  template <class TPixelFormat>
34  [[nodiscard]] static auto makeFromSizeAndPitch(
35  ImageSize image_size, size_t pitch_bytes) -> ImageLayout {
36  SOPHUS_ASSERT_GE(pitch_bytes, image_size.width * sizeof(TPixelFormat));
37  ImageLayout layout;
38  layout.image_size_ = image_size;
39  layout.pitch_bytes_ = pitch_bytes;
40 
41  return layout;
42  }
43 
44  template <class TPixelFormat>
45  [[nodiscard]] static auto makeFromSize(sophus::ImageSize image_size)
46  -> ImageLayout {
47  return makeFromSizeAndPitch<TPixelFormat>(
48  image_size, image_size.width * sizeof(TPixelFormat));
49  }
50 
51  [[nodiscard]] auto imageSize() const -> sophus::ImageSize const& {
52  return image_size_;
53  }
54  [[nodiscard]] auto width() const -> int { return image_size_.width; }
55  [[nodiscard]] auto height() const -> int { return image_size_.height; }
56 
57  [[nodiscard]] auto pitchBytes() const -> size_t { return pitch_bytes_; }
58 
59  [[nodiscard]] auto area() const -> size_t {
60  return this->width() * this->height();
61  }
62  [[nodiscard]] auto sizeBytes() const -> size_t {
63  return pitch_bytes_ * height();
64  }
65 
66  [[nodiscard]] auto isEmpty() const -> bool { return sizeBytes() == 0; }
67 
68  private:
69  sophus::ImageSize image_size_ = {0, 0};
70  size_t pitch_bytes_ = 0;
71 };
72 
73 static_assert(concepts::ImageLayoutTrait<ImageLayout>);
74 
75 /// Equality operator.
76 auto operator==(ImageLayout const& lhs, ImageLayout const& rhs) -> bool;
77 
78 auto operator!=(ImageLayout const& lhs, ImageLayout const& rhs) -> bool;
79 
80 /// Ostream operator.
81 auto operator<<(std::ostream& os, ImageLayout const& layout) -> std::ostream&;
82 
83 } // namespace sophus
SOPHUS_ASSERT_GE
#define SOPHUS_ASSERT_GE(...)
Definition: common.h:42
sophus::ImageLayout::height
auto height() const -> int
Definition: layout.h:55
sophus::ImageLayout::pitchBytes
auto pitchBytes() const -> size_t
Definition: layout.h:57
sophus::ImageLayout::ImageLayout
ImageLayout(ImageSize image_size, size_t pitch_bytes)
Definition: layout.h:27
sophus::ImageLayout
Layout of the image: width, height and pitch in bytes.
Definition: layout.h:23
sophus::ImageLayout::makeFromSize
static auto makeFromSize(sophus::ImageSize image_size) -> ImageLayout
Definition: layout.h:45
sophus
Image MutImage, owning images types.
Definition: num_diff.h:20
sophus::ImageLayout::area
auto area() const -> size_t
Definition: layout.h:59
sophus::ImageLayout::width
auto width() const -> int
Definition: layout.h:54
image.h
sophus::ImageLayout::makeFromSizeAndPitch
static auto makeFromSizeAndPitch(ImageSize image_size, size_t pitch_bytes) -> ImageLayout
Definition: layout.h:34
sophus::operator!=
auto operator!=(ImageSize const &lhs, ImageSize const &rhs) -> bool
Definition: image_size.cpp:37
sophus::operator==
auto operator==(Region< TT > const &lhs, Region< TT > const &rhs) -> bool
Definition: region.h:367
sophus::ImageLayout::isEmpty
auto isEmpty() const -> bool
Definition: layout.h:66
common.h
sophus::ImageLayout::ImageLayout
ImageLayout()=default
sophus::ImageSize::height
int height
Vertical height of images, i.e. number of rows.
Definition: image_size.h:56
sophus::ImageSize::width
int width
Horizontal width of images, i.e. number of columns.
Definition: image_size.h:53
sophus::operator<<
auto operator<<(std::ostream &os, ImageSize const &image_size) -> std::ostream &
Ostream operator.
Definition: image_size.cpp:46
sophus::ImageLayout::ImageLayout
ImageLayout(int width, int height, size_t pitch_bytes)
Definition: layout.h:30
sophus::ImageLayout::sizeBytes
auto sizeBytes() const -> size_t
Definition: layout.h:62
sophus::ImageLayout::imageSize
auto imageSize() const -> sophus::ImageSize const &
Definition: layout.h:51
image_size.h
sophus::ImageSize
Image size, hence its width and height.
Definition: image_size.h:21