Beispiel #1
0
// Draw curve.
void qxgeditScale::paintEvent ( QPaintEvent *pPaintEvent )
{
	QPainter painter(this);

	const int h  = height();
	const int w  = width();

	const int h2 = h >> 1;

	const int x1 = 6 + int((m_iBreak1 * (w - 12)) >> 7);
	const int x2 = 6 + int((m_iBreak2 * (w - 12)) >> 7);
	const int x3 = 6 + int((m_iBreak3 * (w - 12)) >> 7);
	const int x4 = 6 + int((m_iBreak4 * (w - 12)) >> 7);

	const int y1 = h2 - ((int(m_iOffset1) - 64) * (h - 12) >> 7);
	const int y2 = h2 - ((int(m_iOffset2) - 64) * (h - 12) >> 7);
	const int y3 = h2 - ((int(m_iOffset3) - 64) * (h - 12) >> 7);
	const int y4 = h2 - ((int(m_iOffset4) - 64) * (h - 12) >> 7);

	m_poly.putPoints(0, 6,
		0,  y1,
		x1, y1,
		x2, y2,
		x3, y3,
		x4, y4,
		w,  y4);

	const QPalette& pal = palette();
	const bool bDark = (pal.window().color().value() < 0x7f);
	const QColor& rgbLite = (bDark ? Qt::darkYellow : Qt::yellow);
	if (bDark)
		painter.fillRect(0, 0, w, h, pal.dark().color());

	painter.setRenderHint(QPainter::Antialiasing, true);
	painter.setPen(bDark ? Qt::gray : Qt::darkGray);

	const QPen oldpen(painter.pen());
	QPen dotpen(oldpen);
	dotpen.setStyle(Qt::DotLine);
	painter.setPen(dotpen);
	painter.drawLine(0, h2, w, h2);
	painter.setPen(oldpen);

	painter.drawPolyline(m_poly);

	painter.setBrush(rgbLite); // pal.midlight().color()
	painter.drawRect(nodeRect(1));
	painter.drawRect(nodeRect(2));
	painter.drawRect(nodeRect(3));
	painter.drawRect(nodeRect(4));

#ifdef CONFIG_DEBUG_0
	painter.drawText(QFrame::rect(),
		Qt::AlignTop|Qt::AlignHCenter,
		tr("Break (%1,%2,%3,%4) Offset(%5,%6,%7,%8)")
		.arg(int(break1()))
		.arg(int(break2()))
		.arg(int(break3()))
		.arg(int(break4()))
		.arg(int(offset1()) - 64)
		.arg(int(offset2()) - 64)
		.arg(int(offset3()) - 64)
		.arg(int(offset4()) - 64));
#endif

	painter.setRenderHint(QPainter::Antialiasing, false);
	painter.end();

	QFrame::paintEvent(pPaintEvent);
}
Beispiel #2
0
void CSpermView::DrawImage(CDC *pDC)
{	
	int i,n;
	
	CMainFrame* pMainfrm=(CMainFrame*)AfxGetMainWnd();
	CMorphaDetectDLG* pWnd=(CMorphaDetectDLG*)((CView3*)pMainfrm->GetView3())->m_pwndMorphaDetDlg;
	if(pWnd==NULL || pWnd->m_hWnd == NULL) return;
	vector<SpermRegion>& m_vSpermRegion = pWnd->m_vSpermRegion;
	int& m_r=pWnd->m_nR;
	vector<IsSperNormal>& m_vbIsNormal=pWnd->m_vbIsNormal;
	vector<SperMopyParameter>& m_vSperMopyParameter=pWnd->m_vSperMopyParameter;
	LPBYTE& m_lpResBmDataSrc=pWnd->m_lpResBmDataSrc;
	LPBITMAPINFOHEADER& m_lpResBmInfoSrc= pWnd->m_lpResBmInfoSrc;

	LPBYTE& m_lpResEdgeBmDataSrc=pWnd->m_lpResEdgeBmDataSrc;
	LPBITMAPINFOHEADER& m_lpResEdgeBmInfoSrc= pWnd->m_lpResEdgeBmInfoSrc;

	switch(pWnd->m_wndCbxShowOpt.GetCurSel())
	{
	case 2:  //  画原图
		m_imgMorphaImg.Show(pDC->m_hDC,0,0,m_imgMorphaImg.Width(),m_imgMorphaImg.Height());
		break;
	case 1:	 //  画填充图
		if(m_lpResBmInfoSrc && m_lpResBmDataSrc)
		{
			::StretchDIBits(pDC->GetSafeHdc(), 
				0,0, m_lpResBmInfoSrc->biWidth, m_lpResBmInfoSrc->biHeight, 
				0, 0, m_lpResBmInfoSrc->biWidth, m_lpResBmInfoSrc->biHeight, 
				m_lpResBmDataSrc, (LPBITMAPINFO)m_lpResBmInfoSrc, DIB_RGB_COLORS, SRCCOPY);
		}
		break;
	case 0:  // 画边缘图
		if(m_lpResEdgeBmDataSrc && m_lpResBmInfoSrc)
		{
			::StretchDIBits(pDC->GetSafeHdc(), 
				0,0,m_lpResBmInfoSrc->biWidth, m_lpResBmInfoSrc->biHeight, 
				0, 0, m_lpResBmInfoSrc->biWidth, m_lpResBmInfoSrc->biHeight, 
				m_lpResEdgeBmDataSrc, (LPBITMAPINFO)m_lpResBmInfoSrc, DIB_RGB_COLORS, SRCCOPY);
		}
		break;
	}
	if(pWnd->m_wndChkRectangle.GetCheck())
	{
		// 画边框
		CPen myRedPen(PS_SOLID, 1, RGB(255,0,0));
		CPen myBluePen(PS_SOLID, 1, RGB(0,0,255));
		CPen *myPen, *pOldPen;

		n = m_vSpermRegion.size();
		list<int>& m_lsOperateIndex = pWnd->m_lsOperateIndex;
		for(i=0; i<n; i++)
		{			
			if(m_vbIsNormal[i].IsNormalVector[0] == TRUE)
				myPen = &myBluePen;
			else myPen = &myRedPen;
			
			pOldPen = pDC->SelectObject(myPen);  // 选用红画笔
			pDC->SelectObject(GetStockObject(NULL_BRUSH));  // 空白画刷

			if( find(m_lsOperateIndex.begin(),pWnd->m_itListIndex,i )
				!= pWnd->m_itListIndex ) continue;
			CPoint lt = CPoint(m_vSpermRegion[i].SpermCenterPos.y - m_r, m_vSpermRegion[i].SpermCenterPos.x - m_r);
			CPoint rt = CPoint(m_vSpermRegion[i].SpermCenterPos.y + m_r, m_vSpermRegion[i].SpermCenterPos.x - m_r);
			CPoint lb = CPoint(m_vSpermRegion[i].SpermCenterPos.y - m_r, m_vSpermRegion[i].SpermCenterPos.x + m_r);
			CPoint rb = CPoint(m_vSpermRegion[i].SpermCenterPos.y + m_r, m_vSpermRegion[i].SpermCenterPos.x + m_r);	
			CRect  rect = CRect(lt, rb);
            if( m_nPos == i)
			{
				pDC->SelectObject(pOldPen);
				COLORREF color; 
				if(m_vbIsNormal[i].IsNormalVector[0] == TRUE)
					color = RGB(0,0,255); // 选用蓝画笔
				else 
					color = RGB(255,0,0); // 选用红画笔

				CPen dotpen(PS_DASHDOT,1,color);
				pDC->SelectObject(&dotpen);
				pDC->Rectangle(rect);
			    pDC->SelectObject(myPen);
			}
			else
			{
				pDC->Rectangle(rect);
			}
		
		}
		if(n>0)	pDC->SelectObject(pOldPen);		
		// 编号
		{
			CPen myPen(PS_SOLID, 2, RGB(255,0,0));
			CPen *pOldPen = pDC->SelectObject(&myPen); //选用新画笔
			pDC->SetBkMode(TRANSPARENT);
			CString  strNo, cs;
			n = m_vbIsNormal.size();
			for(i=0; i<n; i++)
			{
				if( find(m_lsOperateIndex.begin(),pWnd->m_itListIndex,i)
					!= pWnd->m_itListIndex ) continue;
				
				pDC->SetTextColor(RGB(0,0,255));
				strNo.Format("%d", i+1);
				pDC->TextOut(m_vSpermRegion[i].SpermCenterPos.y - m_r, m_vSpermRegion[i].SpermCenterPos.x + m_r - 15, strNo);
				
				if( m_vbIsNormal[i].IsNormalVector[0] == TRUE )
				{
					pDC->SetTextColor(RGB(0,0,255));
					cs = "正常";
				}
				else
				{
					pDC->SetTextColor(RGB(255,0,0));
					cs = "异常";
				}
				pDC->TextOut(m_vSpermRegion[i].SpermCenterPos.y - m_r + 20, m_vSpermRegion[i].SpermCenterPos.x + m_r - 17, cs);
				
			}	
			pDC->SelectObject(pOldPen);
		}
	}
	if(m_nPos != -1)
	{
		
		CString cs;
 		cs.Format("%.2lf", m_vSperMopyParameter[m_nPos].m_length);
 		pWnd->m_strLength      = cs;
		
		cs.Format("%.2lf", m_vSperMopyParameter[m_nPos].m_width);
		pWnd->m_strWidth       = cs;
		
		cs.Format("%.2lf", m_vSperMopyParameter[m_nPos].m_area);
		pWnd->m_strArea        = cs;
		
		cs.Format("%.2lf", m_vSperMopyParameter[m_nPos].m_perimeter);
		pWnd->m_strPerimeter   = cs;
		
		cs.Format("%3.2lf", m_vSperMopyParameter[m_nPos].m_ellipticity);
		pWnd->m_strEllipticity = cs;
		
		cs.Format("%.2lf", m_vSperMopyParameter[m_nPos].m_perfor_area);
		pWnd->m_strPerforArea = cs;
		
		cs.Format("%.2lf", m_vSperMopyParameter[m_nPos].m_head_area);
		pWnd->m_strHeadArea   = cs;
		
		cs.Format("%.1f", m_vSperMopyParameter[m_nPos].m_head_perfor_area*100);
		pWnd->m_strHeadPerforArea  = cs + "%";
		
		
		cs.Format("%.2lf", m_vSperMopyParameter[m_nPos].m_tail_length);
		pWnd->m_strMitsomaLength = cs;
		
		cs.Format("%.2lf", m_vSperMopyParameter[m_nPos].m_tail_width);
		pWnd->m_strMitosomaWidth  = cs;
		
		cs.Format("%.2lf", m_vSperMopyParameter[m_nPos].m_tail_angle);
		pWnd->m_strMitosmaDevangle  = cs + "度";
		
		cs.Format("%.2f", m_vSperMopyParameter[m_nPos].m_ruga);
		pWnd->m_strRuga  = cs;
		
		cs.Format("%.2f", m_vSperMopyParameter[m_nPos].m_extension);
		pWnd->m_strExtension  = cs;
		
		cs.Format("%.2f", m_vSperMopyParameter[m_nPos].m_symmetry);
		pWnd->m_strSymmetry   = cs;
		
		// 精子编号	
		cs.Format("第%d号精子  -->> ", m_nPos+1);
		pWnd->m_strInfo  =  cs;
	
		cs = ( (m_vbIsNormal[m_nPos].IsNormalVector[0] == TRUE ) ? "正常" : "异常");
		pWnd->m_strIsNormal = cs;
		
		pWnd->UpdateData(FALSE);
		pWnd->Invalidate();
	}
}