From 3f31a2eed6598e4fb428ab1e5b186f708da5e427 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Tue, 26 Sep 2017 20:58:50 +0200 Subject: [PATCH] Applying Auto white balance to large files in file browser leads to wrong results, fixes #4108 --- rtengine/rtthumbnail.cc | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/rtengine/rtthumbnail.cc b/rtengine/rtthumbnail.cc index 065d4640c..ea0fd9f1c 100644 --- a/rtengine/rtthumbnail.cc +++ b/rtengine/rtthumbnail.cc @@ -714,9 +714,8 @@ Thumbnail* Thumbnail::loadFromRaw (const Glib::ustring& fname, RawMetaDataLocati double avg_r = 0; double avg_g = 0; double avg_b = 0; - const float eps = 1e-5; //tolerance to avoid dividing by zero - float rn = eps, gn = eps, bn = eps; + unsigned int rn = 0, gn = 0, bn = 0; for (int i = 32; i < height - 32; i++) { int start, end; @@ -831,9 +830,9 @@ Thumbnail* Thumbnail::loadFromRaw (const Glib::ustring& fname, RawMetaDataLocati } } - double reds = avg_r / rn * tpp->camwbRed; - double greens = avg_g / gn * tpp->camwbGreen; - double blues = avg_b / bn * tpp->camwbBlue; + double reds = avg_r / std::max(rn, 1u) * tpp->camwbRed; + double greens = avg_g / std::max(gn, 1u) * tpp->camwbGreen; + double blues = avg_b / std::max(bn, 1u) * tpp->camwbBlue; tpp->redAWBMul = ri->get_rgb_cam (0, 0) * reds + ri->get_rgb_cam (0, 1) * greens + ri->get_rgb_cam (0, 2) * blues; tpp->greenAWBMul = ri->get_rgb_cam (1, 0) * reds + ri->get_rgb_cam (1, 1) * greens + ri->get_rgb_cam (1, 2) * blues;