From b9bf6bf183d5fe91f82d8ab76625de61a85f78ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Du=C5=A1an=20Poizl?= Date: Tue, 21 Nov 2023 18:31:07 +0100 Subject: [PATCH] Fixed scaling for int32 --- imagescrollareagl.cpp | 13 ++++--------- rawimage.cpp | 17 +++++++++++++++++ rawimage.h | 1 + 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/imagescrollareagl.cpp b/imagescrollareagl.cpp index e3d76f4..699231f 100644 --- a/imagescrollareagl.cpp +++ b/imagescrollareagl.cpp @@ -115,16 +115,11 @@ void ImageWidget::setImage(std::shared_ptr image, int index) m_unit_scale[0] = 1.0f; m_unit_scale[1] = 0.0f; - auto &stats = image->imageStats(); - if(image->type() == RawImage::FLOAT32 || image->type() == RawImage::FLOAT64) + if(image->type() == RawImage::FLOAT32) { - float min = *std::min_element(stats.m_min, stats.m_min + 4); - float max = *std::max_element(stats.m_max, stats.m_max + 4); - if(min < 0.0f || max > 1.0f) - { - m_unit_scale[0] = 1.0f / (max - min); - m_unit_scale[1] = min * m_unit_scale[0]; - } + auto unitScaling = image->unitScale(); + m_unit_scale[0] = unitScaling.first; + m_unit_scale[1] = unitScaling.second; } if(m_debayerTex) diff --git a/rawimage.cpp b/rawimage.cpp index cc46db6..68ecefc 100644 --- a/rawimage.cpp +++ b/rawimage.cpp @@ -567,6 +567,23 @@ void RawImage::downscaleTo(uint32_t size) }*/ } +std::pair RawImage::unitScale() const +{ + float min = *std::min_element(m_stats.m_min, m_stats.m_min + 4); + float max = *std::max_element(m_stats.m_max, m_stats.m_max + 4); + + if(m_origType == UINT32) + { + min /= (float)UINT32_MAX; + max /= (float)UINT32_MAX; + } + + if(min < 0.0f || max > 1.0f) + return {1.0f / (max - min), min / (max - min)}; + else + return {1.0f, 0.0f}; +} + std::shared_ptr RawImage::fromPlanar(const RawImage &img) { return RawImage::fromPlanar(img.data(), img.width(), img.height(), img.channels(), img.type()); diff --git a/rawimage.h b/rawimage.h index 54e77db..bd32015 100644 --- a/rawimage.h +++ b/rawimage.h @@ -98,6 +98,7 @@ public: float thumbAspect() const; bool pixel(int x, int y, double &r, double &g, double &b) const; void downscaleTo(uint32_t size); + std::pair unitScale() const; static std::shared_ptr fromPlanar(const RawImage &img); static std::shared_ptr fromPlanar(const void *pixels, uint32_t w, uint32_t h, uint32_t ch, DataType type);