Skip to content

Commit 64ee518

Browse files
authored
iv: Add min/max/avg and sizing to pixel closeup view (AcademySoftwareFoundation#4807)
This changeset has bunch of improvements for pixel closeup window feature: - Min/max/avg values - RGB channels are colored with respective color - Pixel colors in preview window are showing actual colors (previously there was semi-dimming overlay on top of them) - Center pixel is now marked including corner cases when close to the edge - During follow cursor mode window switches the the left from the cursor when too close to right edge, and at the top when too close to bottom edge - Number of previeable pixels is configurable - Number of pixels in a preview used for averaging is configurable -- When avg subset is smaller then main closeup window there is an indicator showing are that being averaged --------- Signed-off-by: Aleksandr Motsjonov <soswow@gmail.com>
1 parent 7d22e1f commit 64ee518

5 files changed

Lines changed: 638 additions & 131 deletions

File tree

src/iv/imageviewer.cpp

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -497,6 +497,40 @@ ImageViewer::createActions()
497497
toggleAreaSampleAct->setShortcut(tr("Ctrl+A"));
498498
connect(toggleAreaSampleAct, SIGNAL(triggered()), this,
499499
SLOT(toggleAreaSample()));
500+
501+
closeupPixelsLabel = new QLabel(tr("# closeup pixels:"));
502+
closeupPixelsBox = new QSpinBox();
503+
closeupPixelsBox->setRange(9, 25);
504+
closeupPixelsBox->setValue(13);
505+
closeupPixelsBox->setSingleStep(2);
506+
507+
QString closeupPixelsTooltip = tr(
508+
"Number of pixels to show in the closeup view.");
509+
closeupPixelsBox->setToolTip(closeupPixelsTooltip);
510+
closeupPixelsLabel->setToolTip(closeupPixelsTooltip);
511+
512+
closeupAvgPixelsLabel = new QLabel(tr("# closeup avg pixels:"));
513+
closeupAvgPixelsBox = new QSpinBox();
514+
closeupAvgPixelsBox->setRange(3, 25);
515+
closeupAvgPixelsBox->setValue(11);
516+
closeupAvgPixelsBox->setSingleStep(2);
517+
518+
QString closeupAvgPixelsTooltip = tr(
519+
"Number of pixels to use for averaging in the closeup view.");
520+
closeupAvgPixelsBox->setToolTip(closeupAvgPixelsTooltip);
521+
closeupAvgPixelsLabel->setToolTip(closeupAvgPixelsTooltip);
522+
523+
// Connect signals to ensure closeupAvgPixelsBox value is always <= closeupPixelsBox value
524+
connect(closeupPixelsBox, QOverload<int>::of(&QSpinBox::valueChanged),
525+
[this](int value) {
526+
if (closeupAvgPixelsBox->value() > value)
527+
closeupAvgPixelsBox->setValue(value);
528+
});
529+
connect(closeupAvgPixelsBox, QOverload<int>::of(&QSpinBox::valueChanged),
530+
[this](int value) {
531+
if (value > closeupPixelsBox->value())
532+
closeupAvgPixelsBox->setValue(closeupPixelsBox->value());
533+
});
500534
}
501535

502536

@@ -833,6 +867,7 @@ ImageViewer::readSettings(bool ui_is_set_up)
833867
maxMemoryIC->setValue(settings.value("maxMemoryIC", 2048).toInt());
834868
slideShowDuration->setValue(
835869
settings.value("slideShowDuration", 10).toInt());
870+
closeupPixelsBox->setValue(settings.value("closeupPixels", 13).toInt());
836871

837872
OIIO::attribute("imagebuf:use_imagecache", 1);
838873

@@ -855,6 +890,7 @@ ImageViewer::writeSettings()
855890
settings.setValue("autoMipmap", autoMipmap->isChecked());
856891
settings.setValue("maxMemoryIC", maxMemoryIC->value());
857892
settings.setValue("slideShowDuration", slideShowDuration->value());
893+
settings.setValue("closeupPixels", closeupPixelsBox->value());
858894
QStringList recent;
859895
for (auto&& s : m_recent_files)
860896
recent.push_front(QString(s.c_str()));

src/iv/imageviewer.h

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include <QDialog>
2727
#include <QMainWindow>
2828
#include <QMimeData>
29+
#include <QSpinBox>
2930

3031
#if OIIO_QT_MAJOR < 6
3132
# include <QGLWidget>
@@ -50,7 +51,6 @@ class QMenu;
5051
class QMenuBar;
5152
class QProgressBar;
5253
class QPushButton;
53-
class QSpinBox;
5454
class QScrollArea;
5555
class QStatusBar;
5656
class QVBoxLayout;
@@ -245,6 +245,16 @@ class ImageViewer final : public QMainWindow {
245245
return linearInterpolationBox && linearInterpolationBox->isChecked();
246246
}
247247

248+
int closeupPixels(void) const
249+
{
250+
return closeupPixelsBox ? closeupPixelsBox->value() : 13;
251+
}
252+
253+
int closeupAvgPixels(void) const
254+
{
255+
return closeupAvgPixelsBox ? closeupAvgPixelsBox->value() : 11;
256+
}
257+
248258
bool darkPalette(void) const
249259
{
250260
return darkPaletteBox ? darkPaletteBox->isChecked() : m_darkPalette;
@@ -416,6 +426,10 @@ private slots:
416426
QSpinBox* maxMemoryIC;
417427
QLabel* slideShowDurationLabel;
418428
QSpinBox* slideShowDuration;
429+
QLabel* closeupPixelsLabel;
430+
QSpinBox* closeupPixelsBox;
431+
QLabel* closeupAvgPixelsLabel;
432+
QSpinBox* closeupAvgPixelsBox;
419433

420434
std::vector<IvImage*> m_images; // List of images
421435
int m_current_image; // Index of current image, -1 if none

0 commit comments

Comments
 (0)