Read a specific region of data.
152{
155 return {};
156 }
157
158 if (region.start_coordinates.size() < 2 || region.end_coordinates.size() < 2) {
160 return {};
161 }
162
163 auto x_start = static_cast<uint32_t>(region.start_coordinates[0]);
164 auto y_start = static_cast<uint32_t>(region.start_coordinates[1]);
165 auto x_end = static_cast<uint32_t>(region.end_coordinates[0]);
166 auto y_end = static_cast<uint32_t>(region.end_coordinates[1]);
167
170 return {};
171 }
172
173 uint32_t region_width = x_end - x_start;
174 uint32_t region_height = y_end - y_start;
175 size_t region_size =
static_cast<size_t>(region_width * region_height) *
m_image_data->channels;
176 std::vector<uint8_t> region_data(region_size);
177
178 for (uint32_t y = 0; y < region_height; ++y) {
180 size_t dst_offset =
static_cast<size_t>(y * region_width) *
m_image_data->channels;
181 size_t row_size =
static_cast<size_t>(region_width) *
m_image_data->channels;
182 std::memcpy(
183 region_data.data() + dst_offset,
185 row_size);
186 }
187
188 return { region_data };
189}
std::optional< ImageData > m_image_data