diff --git a/rawimage.cpp b/rawimage.cpp index 262f823..cc46db6 100644 --- a/rawimage.cpp +++ b/rawimage.cpp @@ -131,7 +131,9 @@ void calcStats(const T *data, size_t n, size_t w, RawImage::Stats &stats) T max[4] = {std::numeric_limits::min(), std::numeric_limits::min(), std::numeric_limits::min(), std::numeric_limits::min()}; uint32_t histSize = 65536; if constexpr(std::is_same::value)histSize = 256; - uint32_t histogram[4][65536] = {}; + std::vector histogram[4]; + histogram[0].resize(histSize); histogram[1].resize(histSize); histogram[2].resize(histSize); histogram[3].resize(histSize); + T sat = SATURATION * std::numeric_limits::max(); if constexpr(!std::numeric_limits::is_integer)sat = SATURATION; uint32_t saturated[4] = {0}; @@ -150,7 +152,7 @@ void calcStats(const T *data, size_t n, size_t w, RawImage::Stats &stats) if(d > sat)saturated[x]++; }; - auto findMedian = [histSize](uint32_t histogram[], size_t n) -> size_t + auto findMedian = [histSize](std::vector &histogram, size_t n) -> size_t { size_t histSum = 0; for(size_t o=0; o < histSize; o++) @@ -205,7 +207,7 @@ void calcStats(const T *data, size_t n, size_t w, RawImage::Stats &stats) uint32_t median = findMedian(histogram[i], na[i]); stats.m_median[i] = median; - uint32_t madHist[65536] = {0}; + std::vector madHist(histSize, 0); madHist[0] = histogram[i][median]; for(size_t o = 1; o < histSize; o++) {