From bf89bd09c062b6d5e12ecec6c278c7b7b784c40b Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sun, 1 Feb 2026 11:04:23 +0100 Subject: [PATCH] jfjoch_viewer: Improve in displaying overlay numbers --- viewer/image_viewer/JFJochImage.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/viewer/image_viewer/JFJochImage.cpp b/viewer/image_viewer/JFJochImage.cpp index 0b2335f2..6ca2a344 100644 --- a/viewer/image_viewer/JFJochImage.cpp +++ b/viewer/image_viewer/JFJochImage.cpp @@ -680,6 +680,10 @@ void JFJochImage::writePixelLabels() { const int visH = std::max(0, endY - startY); int maxLabels = 1000; + // Choose thresholds that fit your UI width + constexpr float kMinFixed = 1e-3; + constexpr float kMaxFixed = 1e5; + if (visW * visH <= maxLabels) { QString numBuf; // reused buffer @@ -688,14 +692,27 @@ void JFJochImage::writePixelLabels() { const int idx = y * W + x; const float val = image_fp[idx]; + const auto absVal = std::abs(val); + const auto nearest = std::nearbyint(val); + const QString* pText = nullptr; if (std::isnan(val)) { pText = &kGap; } else if (std::isinf(val)) { pText = std::signbit(val) ? &kErr : &kSat; + } else if (val == 0.0f) { + numBuf = QStringLiteral("0"); + pText = &numBuf; + } else if (absVal >= kMinFixed && absVal < kMaxFixed) { + if (std::abs(val - nearest) < 1e-6) + numBuf = QString::number(static_cast(val)); + else if (absVal < 1e4) + numBuf = QString::number(val, 'f', 3); + else + numBuf = QString::number(val, 'f', 2); + pText = &numBuf; } else { - // Fixed format reduces overhead and string length variability - numBuf = QString::number(val, 'g', 4); + numBuf = QString::number(val, 'e', 1); pText = &numBuf; }