diff --git a/viewer/image_viewer/JFJochDiffractionImage.cpp b/viewer/image_viewer/JFJochDiffractionImage.cpp index 9c535ad5..513b2519 100644 --- a/viewer/image_viewer/JFJochDiffractionImage.cpp +++ b/viewer/image_viewer/JFJochDiffractionImage.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include "JFJochSimpleImage.h" @@ -129,19 +130,26 @@ void JFJochDiffractionImage::LoadImageInternal() { image_fp.resize(W*H); - auto img = image->Image(); - // Fill the QImage with pixel data from the array - for (int pxl = 0; pxl < W * H; pxl++) { - auto val = img[pxl]; - if (val == GAP_PXL_VALUE) - image_fp[pxl] = NAN; - else if (val == ERROR_PXL_VALUE) - image_fp[pxl] = -INFINITY; - else if (val == SATURATED_PXL_VALUE) - image_fp[pxl] = INFINITY; - else - image_fp[pxl] = static_cast(val); - } + const auto &img = image->Image(); + + QVector rows; + rows.reserve(H); + for (int y = 0; y < H; ++y) rows.push_back(y); + + // Fill the float image with pixel data from the array + QtConcurrent::blockingMap(rows, [&](int y) { + for (size_t pxl = y * W; pxl < (y + 1) * W; pxl++) { + auto val = img[pxl]; + if (val == GAP_PXL_VALUE) + image_fp[pxl] = NAN; + else if (val == ERROR_PXL_VALUE) + image_fp[pxl] = -INFINITY; + else if (val == SATURATED_PXL_VALUE) + image_fp[pxl] = INFINITY; + else + image_fp[pxl] = static_cast(val); + } + }); } void JFJochDiffractionImage::DrawSpots() {