void QHistogram::realPaintEvent(QPaintEvent *) { QPainter painter(this); painter.drawImage(rect(),*m_panelImage); Histogram* histogram = m_pTFEditor->getHistogram(); if(histogram != NULL) { if(m_histogramType == 2) //bar { painter.setBrush(QColor(255,255,0,150));//Qt::yellow); painter.setPen(Qt::blue); for(unsigned int x=0;x<(unsigned int)histogram->getLength();++x) { float binheight = 1; if(m_yTransform == 1) binheight = 1e-5 + (log10((float)(*histogram)[x] + 1)/m_histogramMax) * m_binMaxHeight; else binheight = ((float)(*histogram)[x])/m_histogramMax * m_binMaxHeight; float xpos = (float)(m_panelLMargin + 1)+ (float)x * m_binWidth; float ypos = m_panelUMargin + m_panelHeight - binheight; QRect binobj(xpos,ypos,m_binWidth,binheight); painter.drawRect(binobj); } } else if(m_histogramType == 1) // curve { if(!m_histogramMax) return; painter.setBrush(QColor(255,255,0,150)); painter.setPen(Qt::blue); QPainterPath path; path.moveTo(m_panelLMargin,m_panelUMargin+m_panelHeight); for(unsigned int x=0;x<(unsigned int)histogram->getLength();++x) { float binheight = 1; if(m_yTransform == 1) binheight = 1e-5 + (log10((float)(*histogram)[x] + 1)/m_histogramMax) * m_binMaxHeight; else binheight = ((float)(*histogram)[x])/m_histogramMax * m_binMaxHeight; float xpos = (float)(m_panelLMargin)+ (float)x * m_binWidth + 0.5*m_binWidth; float ypos = m_panelUMargin + m_panelHeight - binheight; path.lineTo(xpos,ypos); } path.lineTo(rect().width()-m_panelRMargin,m_panelUMargin+m_panelHeight); painter.drawPath(path); } } }
void QHistogram::updateHistogram() { Histogram* histogram = m_pTFEditor->getHistogram(); if(histogram != NULL) { m_histogramMax = -1e10; m_histogramMin = 1e10; m_binWidth = (float)(m_panelWidth - 2)/ histogram->getLength(); m_binMaxHeight = 0.98*m_panelHeight; if(m_yTransform == 0) // linear { for(unsigned int x=0;x<histogram->getLength();++x) { if(m_histogramMax < (*histogram)[x]) m_histogramMax = (*histogram)[x]; if(m_histogramMin > (*histogram)[x]) m_histogramMin = (*histogram)[x]; } } else if(m_yTransform == 1) // log { for(unsigned int x=0;x<histogram->getLength();++x) { if(m_histogramMax < log10((float)(*histogram)[x] + 1)) m_histogramMax = log10((float)(*histogram)[x] + 1)+1e-10; if(m_histogramMin > log10((float)(*histogram)[x] + 1)) m_histogramMin = log10((float)(*histogram)[x] + 1)+1e-10; if(fabs(m_histogramMin) < 1e-10f) m_histogramMin = 1e-10f; } } repaint(); } }