72 lines
1.9 KiB
C++
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);
|
|
};
|