コード例 #1
0
ファイル: QHistogram.cpp プロジェクト: gnavvy/Paraft
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);
		}
	}
}
コード例 #2
0
ファイル: QHistogram.cpp プロジェクト: gnavvy/Paraft
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();
	}
}