Files
Jungfraujoch/viewer/widgets/JFJochSimpleImageViewer.h
T

72 lines
1.9 KiB
C++

// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute <filip.leonarski@psi.ch>
// SPDX-License-Identifier: GPL-3.0-only
#pragma once
#include <QGraphicsView>
#include <QVector>
#include <QColor>
#include <QPointF>
#include <QGraphicsTextItem>
#include <vector>
#include "../SimpleImage.h"
#include "../../common/ColorScale.h"
class JFJochSimpleImageViewer : public QGraphicsView {
Q_OBJECT
public:
explicit JFJochSimpleImageViewer(QWidget* parent = nullptr);
void setImage(const std::shared_ptr<const SimpleImage> &img);
void clear();
public slots:
void setBackground(float v);
void setForeground(float v);
void setColorMap(int colorMapEnumValue);
signals:
void foregroundChanged(float v);
void backgroundChanged(float v);
void writeStatusBar(QString string, int timeout);
protected:
void wheelEvent(QWheelEvent* event) override;
void mousePressEvent(QMouseEvent* event) override;
void mouseMoveEvent(QMouseEvent* event) override;
void mouseReleaseEvent(QMouseEvent* event) override;
void resizeEvent(QResizeEvent* event) override;
private:
struct Label {
QPointF pos;
QString text;
QColor color;
};
void renderImage(); // builds pixmap_ from current image_ + settings
void updateScene(); // clears scene, adds pixmap + labels
// Image and rendering state
std::shared_ptr<const SimpleImage> image_;
bool has_image_ = false;
QPixmap pixmap_;
std::vector<rgb> image_rgb_; // intermediate RGB buffer to feed QImage
std::vector<int64_t> image_values_; // original scalar per pixel (for label text)
// View/interaction
double scale_factor_ = 1.0;
QPoint last_mouse_pos_;
bool panning_ = false;
// Settings
float background_ = 0.0f;
float foreground_ = 10.0f;
ColorScale color_scale_;
bool auto_fgbg = true;
template <class T>
void renderImage(QImage &qimg, const uint8_t *input);
};