diff --git a/rtengine/rtthumbnail.cc b/rtengine/rtthumbnail.cc index 150582f57..1623ecfbf 100644 --- a/rtengine/rtthumbnail.cc +++ b/rtengine/rtthumbnail.cc @@ -62,15 +62,15 @@ bool checkRawImageThumb (const rtengine::RawImage& raw_image) void scale_colors (rtengine::RawImage *ri, float scale_mul[4], float cblack[4], bool multiThread) { DCraw::dcrawImage_t image = ri->get_image(); + const int height = ri->get_iheight(); + const int width = ri->get_iwidth(); + const int top_margin = ri->get_topmargin(); + const int left_margin = ri->get_leftmargin(); + const int raw_width = ri->get_rawwidth(); + const bool isFloat = ri->isFloat(); + const float * const float_raw_image = ri->get_FloatRawImage(); if (ri->isBayer()) { - const int height = ri->get_iheight(); - const int width = ri->get_iwidth(); - const bool isFloat = ri->isFloat(); - const int top_margin = ri->get_topmargin(); - const int left_margin = ri->get_leftmargin(); - const int raw_width = ri->get_rawwidth(); - const float * const float_raw_image = ri->get_FloatRawImage(); #ifdef _OPENMP #pragma omp parallel for if(multiThread) #endif @@ -110,14 +110,6 @@ void scale_colors (rtengine::RawImage *ri, float scale_mul[4], float cblack[4], } } } else if (ri->isXtrans()) { - const int height = ri->get_iheight(); - const int width = ri->get_iwidth(); - const bool isFloat = ri->isFloat(); - const int top_margin = ri->get_topmargin(); - const int left_margin = ri->get_leftmargin(); - const int raw_width = ri->get_rawwidth(); - const float * const float_raw_image = ri->get_FloatRawImage(); - #ifdef _OPENMP #pragma omp parallel for if(multiThread) #endif @@ -157,6 +149,20 @@ void scale_colors (rtengine::RawImage *ri, float scale_mul[4], float cblack[4], image[row * width + col][ccol] = rtengine::CLIP (val); } } + } else if (isFloat) { +#ifdef _OPENMP + #pragma omp parallel for if(multiThread) +#endif + for (int row = 0; row < height; ++row) { + for (int col = 0; col < width; ++col) { + for (int i = 0; i < ri->get_colors(); ++i) { + float val = float_raw_image[(row + top_margin) * raw_width + col + left_margin + i]; + val -= cblack[i]; + val *= scale_mul[i]; + image[row * width + col][i] = val; + } + } + } } else { const int size = ri->get_iheight() * ri->get_iwidth();