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