diff options
Diffstat (limited to 'src/image.cpp')
| -rw-r--r-- | src/image.cpp | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/src/image.cpp b/src/image.cpp index 000ca2d..e4d51c1 100644 --- a/src/image.cpp +++ b/src/image.cpp @@ -132,13 +132,27 @@ std::shared_ptr<Pixels> Image::pixels() const void Image::copyFromData(const void *src, size_t size) { - if (size > sizeof(data)) - { - // throw std::logic_error(std::format) + if (Q_UNLIKELY(size % sizeof(data) != 0 || size < sizeof(data))) { + throw std::logic_error(__func__ + std::string(": wrong data size")); } - if (pixelFormat == libcamera::formats::R8) - { + switch (pixelFormat) { + case libcamera::formats::R8: { + // std::cout << "R8" << std::endl; memcpy(data, src, size); + break; + } + case libcamera::formats::R16: { + // std::cout << "R16" << std::endl; +#pragma omp parallel +#pragma omp for + for (size_t i = 0; i < img_size; i++) { + data[i / img_width][i % img_width] = (((uint16_t *) src)[i] & 0xff00) >> 8; + } + break; + } + default: + throw std::logic_error(__func__ + std::string(": unsupported pixel format")); + break; } } |
