jfjoch_viewer: Improve HDR mode
All checks were successful
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 12m22s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 14m4s
Build Packages / Generate python client (push) Successful in 13s
Build Packages / build:rpm (rocky8) (push) Successful in 14m15s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 14m21s
Build Packages / Create release (push) Has been skipped
Build Packages / build:rpm (ubuntu2204) (push) Successful in 14m15s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 14m27s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 15m5s
Build Packages / Build documentation (push) Successful in 52s
Build Packages / build:rpm (rocky9) (push) Successful in 15m1s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 9m14s
Build Packages / build:rpm (ubuntu2204_nocuda) (pull_request) Successful in 13m5s
Build Packages / build:rpm (ubuntu2404_nocuda) (pull_request) Successful in 12m35s
Build Packages / build:rpm (rocky8_nocuda) (pull_request) Successful in 13m24s
Build Packages / Generate python client (pull_request) Successful in 11s
Build Packages / build:rpm (rocky8) (pull_request) Successful in 12m58s
Build Packages / build:rpm (rocky8_sls9) (pull_request) Successful in 13m8s
Build Packages / Create release (pull_request) Has been skipped
Build Packages / build:rpm (rocky9_nocuda) (pull_request) Successful in 14m12s
Build Packages / Build documentation (pull_request) Successful in 41s
Build Packages / build:rpm (rocky9) (pull_request) Successful in 10m40s
Build Packages / build:rpm (ubuntu2404) (pull_request) Successful in 7m23s
Build Packages / build:rpm (ubuntu2204) (pull_request) Successful in 8m0s
Build Packages / Unit tests (push) Successful in 1h0m8s
Build Packages / Unit tests (pull_request) Successful in 50m6s
All checks were successful
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 12m22s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 14m4s
Build Packages / Generate python client (push) Successful in 13s
Build Packages / build:rpm (rocky8) (push) Successful in 14m15s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 14m21s
Build Packages / Create release (push) Has been skipped
Build Packages / build:rpm (ubuntu2204) (push) Successful in 14m15s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 14m27s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 15m5s
Build Packages / Build documentation (push) Successful in 52s
Build Packages / build:rpm (rocky9) (push) Successful in 15m1s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 9m14s
Build Packages / build:rpm (ubuntu2204_nocuda) (pull_request) Successful in 13m5s
Build Packages / build:rpm (ubuntu2404_nocuda) (pull_request) Successful in 12m35s
Build Packages / build:rpm (rocky8_nocuda) (pull_request) Successful in 13m24s
Build Packages / Generate python client (pull_request) Successful in 11s
Build Packages / build:rpm (rocky8) (pull_request) Successful in 12m58s
Build Packages / build:rpm (rocky8_sls9) (pull_request) Successful in 13m8s
Build Packages / Create release (pull_request) Has been skipped
Build Packages / build:rpm (rocky9_nocuda) (pull_request) Successful in 14m12s
Build Packages / Build documentation (pull_request) Successful in 41s
Build Packages / build:rpm (rocky9) (pull_request) Successful in 10m40s
Build Packages / build:rpm (ubuntu2404) (pull_request) Successful in 7m23s
Build Packages / build:rpm (ubuntu2204) (pull_request) Successful in 8m0s
Build Packages / Unit tests (push) Successful in 1h0m8s
Build Packages / Unit tests (pull_request) Successful in 50m6s
This commit is contained in:
@@ -159,6 +159,9 @@ JFJochViewerWindow::JFJochViewerWindow(QWidget *parent, bool dbus, const QString
|
||||
connect(toolBarDisplay, &JFJochViewerToolbarDisplay::setAutoForeground, viewer,
|
||||
&JFJochDiffractionImage::setAutoForeground);
|
||||
|
||||
connect(toolBarDisplay, &JFJochViewerToolbarDisplay::setHDRMode, viewer,
|
||||
&JFJochImage::setHDRMode);
|
||||
|
||||
connect(toolBarDisplay, &JFJochViewerToolbarDisplay::colorMapChanged, viewer,
|
||||
&JFJochDiffractionImage::setColorMap);
|
||||
|
||||
|
||||
@@ -600,7 +600,9 @@ void JFJochImage::GeneratePixmap() {
|
||||
const auto &lut_data = color_scale.LUTData();
|
||||
const int64_t lutSize = lut_data.size();
|
||||
const float lutScale = static_cast<float>(lutSize - 1);
|
||||
const float invRange = (maxv > minv) ? (1.0f / (maxv - minv)) * lutScale : 0.0f;
|
||||
const float range = maxv - minv;
|
||||
const float invRange = (range > 0) ? (lutScale / range) : 0.0f;
|
||||
const float invRangeLog = (range > 0) ? (lutScale / std::log1p(range)) : 0.0f;
|
||||
|
||||
rgb gap_color = color_scale.Apply(ColorScaleSpecial::Gap);
|
||||
for (int y = 0; y < H; ++y) {
|
||||
@@ -619,7 +621,22 @@ void JFJochImage::GeneratePixmap() {
|
||||
c = std::signbit(fp) ? bad_color : sat_color;
|
||||
}
|
||||
} else {
|
||||
auto idx = static_cast<int>((fp - minv) * invRange + 0.5f);
|
||||
float f;
|
||||
const float fp_minv = fp - minv;
|
||||
|
||||
if (hdr_mode) {
|
||||
if (fp_minv <= 0.0f)
|
||||
f = 0.0f;
|
||||
else if (fp_minv >= range)
|
||||
f = lutSize;
|
||||
else
|
||||
f = std::log1p(fp_minv) * invRangeLog;
|
||||
} else
|
||||
f = fp_minv * invRange;
|
||||
|
||||
if (f < 0.0f) f = 0.0f;
|
||||
|
||||
auto idx = static_cast<int>(f + 0.5f);
|
||||
if (idx <= 0) idx = 0;
|
||||
else if (idx >= lutSize) idx = lutSize - 1;
|
||||
c = lut_data[idx];
|
||||
@@ -849,3 +866,9 @@ void JFJochImage::adjustForeground(bool input) {
|
||||
}
|
||||
|
||||
void JFJochImage::beforeOverlayCleared() {}
|
||||
|
||||
void JFJochImage::setHDRMode(bool input) {
|
||||
hdr_mode = input;
|
||||
GeneratePixmap();
|
||||
Redraw();
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@ protected:
|
||||
|
||||
bool auto_bg = false;
|
||||
bool auto_fg = false;
|
||||
bool hdr_mode = false;
|
||||
|
||||
double scale_factor = 1.0;
|
||||
|
||||
@@ -108,6 +109,7 @@ public slots:
|
||||
void fitToView();
|
||||
|
||||
void adjustForeground(bool input);
|
||||
void setHDRMode(bool input);
|
||||
public:
|
||||
explicit JFJochImage(QWidget *parent = nullptr);
|
||||
};
|
||||
|
||||
@@ -21,6 +21,11 @@ JFJochViewerToolbarDisplay::JFJochViewerToolbarDisplay(QWidget *parent)
|
||||
auto_foreground_button->setChecked(false);
|
||||
addWidget(auto_foreground_button);
|
||||
|
||||
hdr_mode_button = new QPushButton("HDR");
|
||||
hdr_mode_button->setCheckable(true);
|
||||
hdr_mode_button->setChecked(false);
|
||||
addWidget(hdr_mode_button);
|
||||
|
||||
addWidget(new QLabel(" <b>Color map</b> "));
|
||||
|
||||
// Initialize QComboBox with the options
|
||||
@@ -41,7 +46,7 @@ JFJochViewerToolbarDisplay::JFJochViewerToolbarDisplay(QWidget *parent)
|
||||
connect(color_map_select, QOverload<int>::of(&QComboBox::currentIndexChanged),
|
||||
this, &JFJochViewerToolbarDisplay::colorComboBoxSet);
|
||||
connect(auto_foreground_button, &QPushButton::clicked, this, &JFJochViewerToolbarDisplay::autoForegroundButtonPressed);
|
||||
|
||||
connect(hdr_mode_button, &QPushButton::clicked, this, &JFJochViewerToolbarDisplay::HDRModeButtonPressed);
|
||||
auto *stretch = new QWidget(this);
|
||||
stretch->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
|
||||
addWidget(stretch);
|
||||
@@ -60,7 +65,6 @@ void JFJochViewerToolbarDisplay::colorComboBoxSet(int val) {
|
||||
emit colorMapChanged(val);
|
||||
}
|
||||
|
||||
|
||||
void JFJochViewerToolbarDisplay::autoForegroundButtonPressed() {
|
||||
emit setAutoForeground(auto_foreground_button->isChecked());
|
||||
}
|
||||
@@ -70,15 +74,18 @@ void JFJochViewerToolbarDisplay::updateAutoForeground(bool val) {
|
||||
auto_foreground_button->setChecked(val);
|
||||
}
|
||||
|
||||
void JFJochViewerToolbarDisplay::HDRModeButtonPressed() {
|
||||
emit setHDRMode(hdr_mode_button->isChecked());
|
||||
}
|
||||
|
||||
void JFJochViewerToolbarDisplay::imageLoaded(std::shared_ptr<const JFJochReaderImage> image) {
|
||||
if (image) {
|
||||
auto valid = image->ValidMinMax();
|
||||
if (valid.has_value())
|
||||
if (valid.has_value() && valid->second > 1)
|
||||
foreground_slider->setMax(valid->second);
|
||||
else
|
||||
foreground_slider->setMax(MAX_SLIDER_NO_IMAGE);
|
||||
} else {
|
||||
foreground_slider->setMax(MAX_SLIDER_NO_IMAGE);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ class JFJochViewerToolbarDisplay : public QToolBar {
|
||||
|
||||
SliderPlusBox *foreground_slider;
|
||||
QPushButton *auto_foreground_button;
|
||||
|
||||
QPushButton *hdr_mode_button;
|
||||
QComboBox *color_map_select;
|
||||
public:
|
||||
JFJochViewerToolbarDisplay(QWidget *parent = nullptr);
|
||||
@@ -26,6 +26,7 @@ signals:
|
||||
void setForeground(float val);
|
||||
void colorMapChanged(int val);
|
||||
void setAutoForeground(bool val);
|
||||
void setHDRMode(bool val);
|
||||
|
||||
public slots:
|
||||
void updateForeground(float val);
|
||||
@@ -35,6 +36,7 @@ private slots:
|
||||
void foregroundSet(double val);
|
||||
void colorComboBoxSet(int val);
|
||||
void autoForegroundButtonPressed();
|
||||
void HDRModeButtonPressed();
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user