9#include <spdlog/spdlog.h>
17 if (!source || !source->isValid()) {
18 spdlog::warn(
"[WorkingImageData]: Invalid source image provided");
23 if (!result.has_value()) {
24 spdlog::error(
"[WorkingImageData]: Init failed: {}",
27 spdlog::debug(
"[WorkingImageData]: Initialized {}x{} ({} ch)",
28 m_width, m_height, m_channels);
34 if (!source_image.isValid()) {
35 spdlog::warn(
"[WorkingImageData::initializeData]: Input ImageRegion is invalid");
41 m_data = std::move(source_image.m_data);
43 m_original_data = m_data;
45 m_width = source_image.width();
46 m_height = source_image.height();
47 m_channels = source_image.channels();
50 spdlog::debug(
"[WorkingImageData::initializeData]: Copied elements ({}x{}, {} ch)",
51 m_width, m_height, m_channels);
55 }
catch (
const std::bad_alloc& e) {
56 spdlog::critical(
"[WorkingImageData::initializeData]: Allocation failed: {}", e.what());
63 if (!m_valid || m_original_data.empty() || m_data.empty()) {
67 if (m_original_data.size() != m_data.size()) {
68 spdlog::error(
"[WorkingImageData::restoreOriginalData]: Size mismatch! Original: {}, Working: {}",
69 m_original_data.size(), m_data.size());
73 std::ranges::copy(m_original_data.begin(), m_original_data.end(), m_data.begin());
std::expected< void, ErrorHandling::CoreError > initializeData(Common::ImageRegion &&source_image)
Re-initializes the internal buffer with a new ImageRegion.
WorkingImageData(std::unique_ptr< Common::ImageRegion > source)
Initializes the working image data from an ImageRegion.
void restoreOriginalData()
Restores the original image data.
constexpr std::string_view to_string(CoreError code)
Converts a CoreError code to a human-readable string.
@ InvalidImageRegion
The provided ImageRegion dimensions or data are invalid.
@ AllocationFailed
Memory allocation failed.
Represents a rectangular region of an image and its pixel data.
Base class providing raw buffer storage and metadata for all working image implementations.