summaryrefslogtreecommitdiff
path: root/src/image.hh
blob: 8191393631b9880936ba5f49fd61c1b679c73ccf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#ifndef IMAGE_HH
#define IMAGE_HH

#include "size.hh"

#include <cstddef>
#include <cstdint>
#include <memory>

class Image {
 public:
  enum class Format : uint8_t {
    RGBA_8888,
    ARGB_8888,
    BGRA_8888,
    ABGR_8888,
  };

  [[nodiscard]]
  Size const& size() const {
    return size_;
  }

  [[nodiscard]]
  uint32_t width() const {
    return size_.width;
  }

  [[nodiscard]]
  uint32_t height() const {
    return size_.height;
  }

  [[nodiscard]]
  Format format() const {
    return format_;
  }

  [[nodiscard]]
  size_t scanline() const {
    return scanline_;
  }

  [[nodiscard]]
  uint8_t const* data() const {
    return pixels_.get();
  }

  Image(Format format, Size size, size_t scanline,
        std::unique_ptr<uint8_t[]> pixels);

 private:
  Image(Image const&) = delete;
  Image& operator=(Image const&) = delete;

  Format const format_;
  Size const size_;
  size_t const scanline_;
  std::unique_ptr<uint8_t[]> pixels_;
};

#endif  // IMAGE_HH