void HistogramImage::render(std::vector<unsigned char> &rgb, double scale, double exponent) { // Tone mapping from 64-bit-per-channel to 8-bit-per-channel, with dithering. PRNG rng; rng.seed(0); unsigned i = 0; unsigned e = mWidth * mHeight * kChannels; rgb.resize(e); for (; i != e; ++i) { double u = std::max(0.0, mCounts[i] * scale); double dither = rng.uniform(); double v = 255.0 * pow(u, exponent) + dither; rgb[i] = std::max(0.0, std::min(255.9, v)); } }