www.pudn.com > qtdso-0.3.1.rar > converterhistogramwid.cpp
#include#include #include #include #include #include ConverterHistogramWid::ConverterHistogramWid( QWidget *parent, const char *name ) : QWidget( parent, name ) { setBackgroundMode( QWidget::NoBackground ); clearSLOT(); } ConverterHistogramWid::~ConverterHistogramWid() { } void ConverterHistogramWid::paintEvent( QPaintEvent * ) { QPixmap buf( size() ); //buf.fill( colorGroup().base() ); buf.fill( Qt::black ); QPainter p; p.begin( &buf ); p.setPen( Qt::green ); for (int i=0; i<256; ++i) { p.drawLine( i, height()-1, i, height()-1-(int)(m_drawFac*m_histogram[i]) ); } p.end(); p.begin( this ); p.drawPixmap( 0, 0, buf ); p.end(); } void ConverterHistogramWid::addValues( Dso *dso, int channel ) { double max = 0.0; int shift = dso->bits()-8; if (shift >= 0) { for (int i=0; i<4096; ++i) { int sample = dso->data( channel, i ) >> shift; m_histogram[sample]++; max = QMAX( max, m_histogram[sample] ); m_max = QMAX( m_max, sample ); m_min = QMIN( m_min, sample ); m_numSamples++; m_sum += sample; } } else { for (int i=0; i<4096; ++i) { int sample = dso->data( channel, i ) << (-shift); m_histogram[sample]++; max = QMAX( max, m_histogram[sample] ); m_max = QMAX( m_max, sample ); m_min = QMIN( m_min, sample ); m_numSamples++; m_sum += sample; } } m_drawFac = (double)height() / max; update(); } void ConverterHistogramWid::clearSLOT() { for (int i=0; i<256; ++i) { m_histogram[i] = 0.0; } m_drawFac = 0.0; m_numSamples = 0.0; m_max = 0; m_sum = 0.0; m_min = 10000000; m_timer.start(); } double ConverterHistogramWid::mean() const { if (m_numSamples != 0.0) { return m_sum / m_numSamples; } return 0.0; } double ConverterHistogramWid::stdDeviation() const { double m = mean(); double sum = 0.0; for (int i=0; i<256; ++i) { const double delta = m_histogram[i] - m; sum += delta*delta; } return sqrt( sum / 256.0 ); }