⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imagenview.cpp

📁 这是VC++ 2003.net图像处理的光盘源程序!!!非常好的
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	ColorSobel(pImg[1],pImg[0],2);
	WorkCanvusToWindow();
}

void CImageNView::On2DimensionCombine()
{
	CClientDC	dc(this);
 	struct	IMAGEPARAMENT P;
	RGBQUAD ColorTab[256];
	WORD	two_dim[128][128];
	BYTE	*buf,buf1[256],*buf0;
	int		i,j,m,t,dp;
	long	pg[256];
  	char	*textbuf[]={"H","S","V","0" };

	ClearWindow(1);
 	GetImageParament(pImg[0],&P);
	pImg[2]->Destroy();
	pImg[2]->Create(256+5,256+5,8,0);

	buf =(BYTE*) malloc(P.nBytesPerLine);
	buf0=(BYTE*) malloc(P.nBytesPerLine);
	for (i=0;i<128;i++) {
		for (j=0;j<128;j++) {
			two_dim[i][j]=0;
		}
	}
	for (i=0;i<P.nHeight;i++) {
		GetRectValue(pImg[0],0,i,P.nWidth,1,buf);
		for (j=0,m=0;j<P.nWidth;j++,m+=P.nBytesPerPixel) 
			buf0[j]=(BYTE) (0.11*buf[m]+0.59*buf[m+1]+0.30*buf[m+2]);
		RgbToHsv(buf,buf,P.nWidth);
		for (j=0,m=0;j<P.nWidth;j++,m+=P.nBytesPerPixel) { 
 			two_dim[(255-buf[m+1])/2][buf[m]/2]++;
		}
 	}
 
	for (j=0;j<256;j++) pg[j]=0;
	for (j=0;j<128;j++) {
		for (i=0;i<128;i++) pg[2*j]+=two_dim[i][j];
	}
	dp=HueHistogShift(pg)/2;
 
 	for (i=0;i<128;i++) {
		for (j=0;j<128;j++) { 
 			t=two_dim[i][j];
			if (t>255) t=255;
 			buf1[(j-dp+128)%128]=t;
 		}
		SetRectValue(pImg[2],128+5,i,128,1,buf1);
 	}
	PsendoColor(ColorTab);
	SetAllPalette(pImg[2],ColorTab);

	RectFillValue(pImg[2],0,128,256+5,5,32);
	RectFillValue(pImg[2],128,0,5,256+5,32);
	RectFillValue(pImg[2],128+5+(0-dp+128)%128,128,1,5,255);
 	RectFillValue(pImg[2],128+5+(43-dp+128)%128,128,1,5,128);
 	RectFillValue(pImg[2],128+5+(85-dp+128)%128,128,1,5,0);

	for (i=0;i<128;i++) {
		for (j=0;j<128;j++) {
			two_dim[i][j]=0;
		}
	}
	for (i=0;i<P.nHeight;i++) {
		GetRectValue(pImg[0],0,i,P.nWidth,1,buf);
		for (j=0,m=0;j<P.nWidth;j++,m+=P.nBytesPerPixel) 
			buf0[j]=(BYTE) (0.11*buf[m]+0.59*buf[m+1]+0.30*buf[m+2]);
		RgbToHsv(buf,buf,P.nWidth);
		for (j=0,m=0;j<P.nWidth;j++,m+=P.nBytesPerPixel) { 
 			two_dim[buf0[j]/2][buf[m]/2]++;
		}
 	}
 
 	for (i=0;i<128;i++) {
		for (j=0;j<128;j++) { 
 			t=two_dim[i][j];
			if (t>255) t=255;
 			buf1[(j-dp+128)%128]=t;
 		}
		SetRectValue(pImg[2],128+5,128+5+i,128,1,buf1);
 	}

 	for (i=0;i<128;i++) {
		for (j=0;j<128;j++) {
			two_dim[i][j]=0;
		}
	}
	for (i=0;i<P.nHeight;i++) {
		GetRectValue(pImg[0],0,i,P.nWidth,1,buf);
		for (j=0,m=0;j<P.nWidth;j++,m+=P.nBytesPerPixel) 
			buf0[j]=(BYTE) (0.11*buf[m]+0.59*buf[m+1]+0.30*buf[m+2]);
		RgbToHsv(buf,buf,P.nWidth);
		for (j=0,m=0;j<P.nWidth;j++,m+=P.nBytesPerPixel) { 
 			two_dim[(255-buf[m+1])/2][(255-buf0[j])/2]++;
		}
 	}
	free(buf);
	free(buf0);

 	for (i=0;i<128;i++) {
		for (j=0;j<128;j++) { 
 			t=two_dim[i][j];
			if (t>255) t=255;
 			buf1[j]=t;
 		}
		SetRectValue(pImg[2],0,i,128,1,buf1);
 	}

	pImg[2]->BitBlt(dc,P.nWidth+40,40,256,256+5,0,0,SRCCOPY);
	dc.TextOut(P.nWidth+40+265,40+118,textbuf[0],lstrlen(textbuf[0]));
	dc.TextOut(P.nWidth+40+124,18,textbuf[1],lstrlen(textbuf[1]));
	dc.TextOut(P.nWidth+20,40+118,textbuf[2],lstrlen(textbuf[2]));
	dc.TextOut(P.nWidth+40+124,40+262,textbuf[2],lstrlen(textbuf[2]));
	dc.TextOut(P.nWidth+20+139,40+118+15,textbuf[3],lstrlen(textbuf[3]));
}

void CImageNView::OnIndexImage()
{
 	struct	IMAGEPARAMENT P;
	CString	str1;
 
 	GetImageParament(pImg[0],&P);
 	if (P.nBitCount>8)
 		TrueColorToIndex(pImg[0],pImg[0]); 
	else
 		LowTypeToIndex(pImg[0],pImg[0]); 

 	ImageCopy(pImg[1],pImg[0]);                 
	str1.Format(" 的索引图像"); 
	WriteTitle(pImg[1],m_FileName,str1);                 
   	WorkCanvusToWindow();                      
}

void CImageNView::SelectDirection(int n)
{
 	CWnd*	pMain = AfxGetMainWnd();
	CMenu*	pMenu = pMain->GetMenu();

	nDirectionNo=n;
	for (int i=0;i<9;i++)
		pMenu->CheckMenuItem(ID_DIRECTION_NO0+i,MF_UNCHECKED);
	pMenu->CheckMenuItem(ID_DIRECTION_NO0+n,MF_CHECKED);
}

void CImageNView::OnDirectionNo0()
{
	SelectDirection(0);
}

void CImageNView::OnDirectionNo1()
{
	SelectDirection(1);
}

void CImageNView::OnDirectionNo2()
{
	SelectDirection(2);
}

void CImageNView::OnDirectionNo3()
{
	SelectDirection(3);
}

void CImageNView::OnDirectionNo4()
{
	SelectDirection(4);
}

void CImageNView::OnDirectionNo5()
{
	SelectDirection(5);
}

void CImageNView::OnDirectionNo6()
{
	SelectDirection(6);
}

void CImageNView::OnDirectionNo7()
{
	SelectDirection(7);
}

void CImageNView::OnDirectionNo8()
{
	SelectDirection(8);
}

void CImageNView::OnSaveMask()
{
	ImageCopy(pImg[8],pImg[1]);
	if (pImg[8]->GetBPP()>1)
		IndexToLowType(pImg[8],pImg[8]);
}

void CImageNView::OnSaveMaskA()
{
	ClearWindow(0);
	AdjustAreaType(pImg[1]);
	OnSaveMask();
}

void CImageNView::OnRemoveBackgrond()
{
	RemoveBackgrond(pImg[8],pImg[1]);
	WorkCanvusToWindow();
}

void CImageNView::OnSaveAddImage()
{
	ImageCopy(pImg[7],pImg[1]);
}

void CImageNView::OnAddImage()
{
 	struct	IMAGEPARAMENT P;
 
	GetImageParament(pImg[1],&P);
  
	AddImage(pImg[1],pImg[7]);
	WorkCanvusToWindow();
}

void CImageNView::OnSobelRgb()
{
 	CWnd*	pMain = AfxGetMainWnd();
	CMenu*	pMenu = pMain->GetMenu();

	nSobelFlag=0;

 	for (int i=0;i<3;i++)
		pMenu->CheckMenuItem(ID_SOBEL_RGB+i,MF_UNCHECKED);
	pMenu->CheckMenuItem(ID_SOBEL_RGB+nSobelFlag,MF_CHECKED);  
}

void CImageNView::OnSobelYiq()
{
 	CWnd*	pMain = AfxGetMainWnd();
	CMenu*	pMenu = pMain->GetMenu();

	nSobelFlag=1;

	for (int i=0;i<3;i++)
		pMenu->CheckMenuItem(ID_SOBEL_RGB+i,MF_UNCHECKED);
	pMenu->CheckMenuItem(ID_SOBEL_RGB+nSobelFlag,MF_CHECKED);  
}

void CImageNView::OnSobelLab()
{
 	CWnd*	pMain = AfxGetMainWnd();
	CMenu*	pMenu = pMain->GetMenu();

	nSobelFlag=2;

	for (int i=0;i<3;i++)
		pMenu->CheckMenuItem(ID_SOBEL_RGB+i,MF_UNCHECKED);
	pMenu->CheckMenuItem(ID_SOBEL_RGB+nSobelFlag,MF_CHECKED);  
}

void CImageNView::OnImageY()
{
	ToYIQLAB(pImg[1],pImg[0],0);
	WorkCanvusToWindow();
}

void CImageNView::OnImageI()
{
	ToYIQLAB(pImg[1],pImg[0],1);
	WorkCanvusToWindow();
}

void CImageNView::OnImageQ()
{
	ToYIQLAB(pImg[1],pImg[0],2);
	WorkCanvusToWindow();
}

void CImageNView::OnImageL()
{
	ToYIQLAB(pImg[1],pImg[0],3);
	WorkCanvusToWindow();
}

void CImageNView::OnImageA()
{
	ToYIQLAB(pImg[1],pImg[0],4);
	WorkCanvusToWindow();
}

void CImageNView::OnImageB()
{
	ToYIQLAB(pImg[1],pImg[0],5);
	WorkCanvusToWindow();
}

void CImageNView::OnContourTracking()
{
	CString	str1;

	ClearWindow(0);
 	ContourTracking(pImg[1]);
 	SetDefaultPalette(pImg[1]);
	str1.Format(" 的索引图像"); 
	WriteTitle(pImg[1],m_FileName,str1); 
   	WorkCanvusToWindow();
}

void CImageNView::OnAreaParamentMeasure()
{
	ClearWindow(0);
  	m_nFlag=ID_AREA_PARAMENT_MEASURE;
}

void CImageNView::OnMakeMask()
{
	ClearWindow(0);
  	m_nFlag=ID_MAKE_MASK;
	m_nMaskF=0;
}

void CImageNView::OnLineCoding()
{
	CString	str1;

	ClearWindow(0);
 	LineCode(pImg[1]);
 	SetDefaultPalette(pImg[1]);
	str1.Format(" 的索引图像"); 
	WriteTitle(pImg[1],m_FileName,str1); 
   	WorkCanvusToWindow();
}

void CImageNView::OnAreaMeasure()
{
	ClearWindow(1);
  	m_nFlag=ID_AREA_MEASURE;
}

void CImageNView::OnSearchAreaKernel()
{
 	struct	IMAGEPARAMENT P;
	CClientDC	dc(this);
  	CString		str="区域数";
	int			n;

	ClearWindow(0);
 	n=SearchAreaKernel(pImg[1]);
   	WorkCanvusToWindow();

	GetImageParament(pImg[1],&P);
	dc.SelectStockObject(WHITE_PEN);
	dc.SelectStockObject(WHITE_BRUSH);
 	dc.Rectangle(P.nWidth+10,0,1023,624);

	dc.TextOut(P.nWidth+50,40,str);
	str.Format("%d",n);
	dc.TextOut(P.nWidth+150,40,str);
}

void CImageNView::OnLimitErosion()
{
	ClearWindow(0);
    ShowCursor(FALSE);
 	LimitErosion(pImg[1]);
    ShowCursor(TRUE);
   	WorkCanvusToWindow();
}

void CImageNView::OnConditionDilation()
{
    ShowCursor(FALSE);
	ConditionDilation(pImg[8],pImg[1]);
    ShowCursor(TRUE);
   	WorkCanvusToWindow();
}

void CImageNView::OnAutomaticSelect()
{
 	CWnd*	pMain = AfxGetMainWnd();
	CMenu*	pMenu = pMain->GetMenu();

	nTrackFlag=0;

	for (int i=0;i<3;i++)
		pMenu->CheckMenuItem(ID_AUTOMATIC_SELECT+i,MF_UNCHECKED);
	pMenu->CheckMenuItem(ID_AUTOMATIC_SELECT+nTrackFlag,MF_CHECKED);  
}

void CImageNView::OnWhiteArea()
{
 	CWnd*	pMain = AfxGetMainWnd();
	CMenu*	pMenu = pMain->GetMenu();

	nTrackFlag=1;

	for (int i=0;i<3;i++)
		pMenu->CheckMenuItem(ID_AUTOMATIC_SELECT+i,MF_UNCHECKED);
	pMenu->CheckMenuItem(ID_AUTOMATIC_SELECT+nTrackFlag,MF_CHECKED);  
}

void CImageNView::OnBlackArea()
{
 	CWnd*	pMain = AfxGetMainWnd();
	CMenu*	pMenu = pMain->GetMenu();

	nTrackFlag=2;

	for (int i=0;i<3;i++)
		pMenu->CheckMenuItem(ID_AUTOMATIC_SELECT+i,MF_UNCHECKED);
	pMenu->CheckMenuItem(ID_AUTOMATIC_SELECT+nTrackFlag,MF_CHECKED);  
}

//-------------------------------------------------------------

void CImageNView::OnLButtonDown(UINT nFlags, CPoint point)
{
	if ((m_nFlag == ID_MAKE_MASK)&&(m_nMaskF==0)) {
 		m_nStartX = m_nMaskX = point.x;
		m_nStartY = m_nMaskY = point.y;
		m_nMaskF=1;

		MakeMask(point.x,point.y,0);
	}

	CView::OnLButtonDown(nFlags, point);
}

void CImageNView::OnMouseMove(UINT nFlags, CPoint point)
{
	CClientDC	dc(this);
 	CPen		penPen(PS_SOLID,1,RGB(255,0,192)),*pOldPen;

	if ((m_nFlag == ID_MAKE_MASK)&&(m_nMaskF==1)) {
 		pOldPen = dc.SelectObject(&penPen);
 		dc.MoveTo(m_nMaskX,m_nMaskY);
		dc.LineTo(point.x,point.y);
  		dc.SelectObject(pOldPen);
		penPen.DeleteObject();
		m_nMaskX = point.x;
		m_nMaskY = point.y;

		MakeMask(point.x,point.y,1);
 	}

	CView::OnMouseMove(nFlags, point);
}

void CImageNView::OnLButtonUp(UINT nFlags, CPoint point) 
{
 	struct	IMAGEPARAMENT P;
	CClientDC	dc(this);
  	CPen		penPen(PS_SOLID,1,RGB(255,0,192)),*pOldPen;
 	int			i,per,ar;
	double		fac;
	char		*textbuf[]={"周长","面积","形状参数" };
	CString		str;

	GetImageParament(pImg[1],&P);
	if ((m_nFlag == ID_AREA_PARAMENT_MEASURE)||
		(m_nFlag == ID_AREA_MEASURE))  {
		dc.SelectStockObject(WHITE_PEN);
		dc.SelectStockObject(WHITE_BRUSH);
 		dc.Rectangle(P.nWidth+10,0,1023,624);

		dc.SetTextColor(RGB(0,0,0));
		for (i=0;i<3;i++) 
			dc.TextOut(P.nWidth+50,40+25*i,textbuf[i]);
 
		if (m_nFlag==ID_AREA_PARAMENT_MEASURE) {
			ar=ParamentMeasure(pImg[1],point,1,&per,&fac);
   			WorkCanvusToWindow();
			str.Format("%d",per);
			dc.TextOut(P.nWidth+150,40,str);
 			str.Format("%5.2lf",fac);
			dc.TextOut(P.nWidth+150,90,str);
		}
		else if (m_nFlag==ID_AREA_MEASURE) {
			ar=ParamentMeasure(pImg[1],point,2,&per,&fac);
   			WorkCanvusToWindow();
		}
		str.Format("%d",ar);
		dc.TextOut(P.nWidth+150,65,str);
	}
	else if ((m_nFlag == ID_MAKE_MASK)&&(m_nMaskF==1)) {
 		pOldPen = dc.SelectObject(&penPen);
 		dc.MoveTo(point.x,point.y);
		dc.LineTo(m_nStartX,m_nStartY);
  		dc.SelectObject(pOldPen);
		penPen.DeleteObject();
		m_nFlag=0;
 
		MakeMask(point.x,point.y,2);
		CreateMaskImage(pImg[6]);
 		pImg[6]->BitBlt(dc,P.nWidth+20,20,pImg[6]->GetWidth(),
			               pImg[6]->GetHeight(),0,0,SRCCOPY);
	}

	CView::OnLButtonUp(nFlags, point);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -