PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
rle_codec.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2021-2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
11#ifndef PACS_ENCODING_COMPRESSION_RLE_CODEC_HPP
12#define PACS_ENCODING_COMPRESSION_RLE_CODEC_HPP
13
15
17
49class rle_codec final : public compression_codec {
50public:
52 static constexpr std::string_view kTransferSyntaxUID = "1.2.840.10008.1.2.5";
53
55 static constexpr int kMaxSegments = 15;
56
58 static constexpr size_t kRLEHeaderSize = 64;
59
63 rle_codec();
64
65 ~rle_codec() override;
66
67 // Non-copyable but movable (internal state)
68 rle_codec(const rle_codec&) = delete;
69 rle_codec& operator=(const rle_codec&) = delete;
70 rle_codec(rle_codec&&) noexcept;
71 rle_codec& operator=(rle_codec&&) noexcept;
72
75
76 [[nodiscard]] std::string_view transfer_syntax_uid() const noexcept override;
77 [[nodiscard]] std::string_view name() const noexcept override;
78 [[nodiscard]] bool is_lossy() const noexcept override;
79 [[nodiscard]] bool can_encode(const image_params& params) const noexcept override;
80 [[nodiscard]] bool can_decode(const image_params& params) const noexcept override;
81
83
86
101 [[nodiscard]] codec_result encode(
102 std::span<const uint8_t> pixel_data,
103 const image_params& params,
104 const compression_options& options = {}) const override;
105
117 [[nodiscard]] codec_result decode(
118 std::span<const uint8_t> compressed_data,
119 const image_params& params) const override;
120
122
123private:
124 class impl;
125 std::unique_ptr<impl> impl_;
126};
127
128} // namespace kcenon::pacs::encoding::compression
129
130#endif // PACS_ENCODING_COMPRESSION_RLE_CODEC_HPP
Abstract base class for image compression codecs.
DICOM RLE Lossless codec implementation.
Definition rle_codec.h:49
std::string_view name() const noexcept override
Returns a human-readable name for the codec.
bool can_encode(const image_params &params) const noexcept override
Checks if this codec supports the given image parameters.
static constexpr std::string_view kTransferSyntaxUID
DICOM Transfer Syntax UID for RLE Lossless.
Definition rle_codec.h:52
rle_codec()
Constructs an RLE codec instance.
rle_codec & operator=(const rle_codec &)=delete
codec_result decode(std::span< const uint8_t > compressed_data, const image_params &params) const override
Decompresses RLE data.
static constexpr size_t kRLEHeaderSize
RLE header size (64 bytes: 16 x 4-byte offsets)
Definition rle_codec.h:58
codec_result encode(std::span< const uint8_t > pixel_data, const image_params &params, const compression_options &options={}) const override
Compresses pixel data to RLE format.
std::string_view transfer_syntax_uid() const noexcept override
Returns the Transfer Syntax UID supported by this codec.
bool can_decode(const image_params &params) const noexcept override
Checks if this codec can decode data with given parameters.
static constexpr int kMaxSegments
Maximum number of RLE segments allowed by DICOM specification.
Definition rle_codec.h:55
bool is_lossy() const noexcept override
Checks if this codec produces lossy compression.
Compression quality settings for lossy codecs.
Parameters describing image pixel data.