Read a specific region of data.
119{
122 return {};
123 }
124
125 if (region.start_coordinates.size() < 2 || region.end_coordinates.size() < 2) {
127 return {};
128 }
129
130 auto x_start = static_cast<uint32_t>(region.start_coordinates[0]);
131 auto y_start = static_cast<uint32_t>(region.start_coordinates[1]);
132 auto x_end = static_cast<uint32_t>(region.end_coordinates[0]);
133 auto y_end = static_cast<uint32_t>(region.end_coordinates[1]);
134
137 return {};
138 }
139
140 uint32_t region_width = x_end - x_start;
141 uint32_t region_height = y_end - y_start;
142 size_t region_size =
static_cast<size_t>(region_width * region_height) *
m_image_data->channels;
143 std::vector<uint8_t> region_data(region_size);
144
145 for (uint32_t y = 0; y < region_height; ++y) {
147 size_t dst_offset =
static_cast<size_t>(y * region_width) *
m_image_data->channels;
148 size_t row_size =
static_cast<size_t>(region_width) *
m_image_data->channels;
149 std::memcpy(
150 region_data.data() + dst_offset,
152 row_size);
153 }
154
155 return { region_data };
156}
std::optional< ImageData > m_image_data