1 #pragma once
2 
3 #ifndef CAMERA_CAPTURE_LEVEL_CONTROL_H
4 #define CAMERA_CAPTURE_LEVEL_CONTROL_H
5 
6 #include <QFrame>
7 #include <QVector>
8 
9 namespace DVGui {
10 class IntLineEdit;
11 class DoubleLineEdit;
12 }  // namespace DVGui
13 //=============================================================================
14 // CameraCaptureLevelHistogram
15 //-----------------------------------------------------------------------------
16 class CameraCaptureLevelHistogram : public QFrame {
17   Q_OBJECT
18 public:
19   enum LevelControlItem {
20     None = 0,
21     BlackSlider,
22     WhiteSlider,
23     GammaSlider,
24     ThresholdSlider,
25     Histogram,
26     NumItems
27   };
28   enum LevelControlMode { Color_GrayScale, BlackAndWhite, NumModes };
29 
30 private:
31   bool m_histogramCue;
32   QVector<int> m_histogramData;
33 
34   LevelControlItem m_currentItem;
35 
36   int m_black, m_white, m_threshold;
37   float m_gamma;
38   int m_offset;  // offset between the handle position and the clicked position
39 
40   LevelControlMode m_mode;
41 
42 public:
43   CameraCaptureLevelHistogram(QWidget* parent = 0);
44 
45   void updateHistogram(QImage& image);
46 
black()47   int black() { return m_black; }
white()48   int white() { return m_white; }
gamma()49   float gamma() { return m_gamma; }
threshold()50   int threshold() { return m_threshold; }
mode()51   LevelControlMode mode() { return m_mode; }
setValues(int black,int white,float gamma)52   void setValues(int black, int white, float gamma) {
53     m_black = black;
54     m_white = white;
55     m_gamma = gamma;
56   }
setThreshold(int thres)57   void setThreshold(int thres) { m_threshold = thres; }
setMode(LevelControlMode mode)58   void setMode(LevelControlMode mode) { m_mode = mode; }
59 
60 protected:
61   void paintEvent(QPaintEvent* event) override;
62 
63   void mousePressEvent(QMouseEvent* event) override;
64   void mouseMoveEvent(QMouseEvent* event) override;
65   void mouseReleaseEvent(QMouseEvent* event) override;
66 
67   void leaveEvent(QEvent* event) override;
68 
69 signals:
70   void valueChange(int itemId);
71 };
72 
73 //-----------------------------------------------------------------------------
74 
75 class CameraCaptureLevelControl : public QFrame {
76   Q_OBJECT
77 
78   CameraCaptureLevelHistogram* m_histogram;
79   DVGui::IntLineEdit *m_blackFld, *m_whiteFld, *m_thresholdFld;
80   DVGui::DoubleLineEdit* m_gammaFld;
81 
82 public:
83   CameraCaptureLevelControl(QWidget* parent = 0);
84 
updateHistogram(QImage & image)85   void updateHistogram(QImage& image) { m_histogram->updateHistogram(image); }
86   void setMode(bool color_grayscale);
87 
getValues(int & black,int & white,float & gamma)88   void getValues(int& black, int& white, float& gamma) {
89     black = m_histogram->black();
90     white = m_histogram->white();
91     gamma = m_histogram->gamma();
92   }
getThreshold()93   float getThreshold() { return m_histogram->threshold(); }
94 
95 protected slots:
96   void onHistogramValueChanged(int itemId);
97   void onFieldChanged();
98 };
99 
100 #endif