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

📄 imagenview.cpp

📁 这是VC++ 2003.net图像处理的光盘源程序!!!非常好的
💻 CPP
📖 第 1 页 / 共 5 页
字号:

void CImageNView::OnGinnerBorder()
{
 	GMorphologic(pImg[2],pImg[1],6);
 	WorkCanvusToWindow();
}

void CImageNView::OnGouterBorder()
{
 	GMorphologic(pImg[2],pImg[1],7);
 	WorkCanvusToWindow();
}

void CImageNView::OnGrayTophat()
{
 	GMorphologic(pImg[2],pImg[1],8);
 	WorkCanvusToWindow();
}

void CImageNView::OnBlackGrayTophat()
{
 	GMorphologic(pImg[2],pImg[1],9);
 	WorkCanvusToWindow();
}

void CImageNView::OnProjection()
{

	struct		IMAGEPARAMENT P;
	int			Tab[2048];
	CClientDC	dc(this);
  
	OnRefresh();
	GetImageParament(pImg[1],&P);
 
 	Projection(pImg[1],Tab,0);
	CreateProjection(pImg[2],Tab,P.nHeight,0);
  	pImg[2]->BitBlt(dc,P.nWidth,0,256+2,P.nHeight,0,0,SRCCOPY);
  
 	Projection(pImg[1],Tab,1);
	CreateProjection(pImg[2],Tab,P.nWidth,1);
 	pImg[2]->BitBlt(dc,0,P.nHeight,P.nWidth,256+2,0,0,SRCCOPY);
}

void CImageNView::OnImageHistogram()
{
	struct		IMAGEPARAMENT P;
	int			x,y,h,n,s,t;
	long		pg[256];
	CClientDC	dc(this);
  
	ClearWindow(1);
	GetImageParament(pImg[1],&P);
 
 	Histogram(pImg[1],0,0,P.nWidth,P.nHeight,pg);
 
	x=P.nWidth+10;
	y=40;
	h=120;
 	n=180;
	s=256;
	t=20;
 
	CreateHistogram(pImg[2],pg,h,0,0);
  	pImg[2]->BitBlt(dc,x,y,s+20,h+20,0,0,SRCCOPY);
	CreateColorStrip(pImg[2],pImg[0],s,t);
  	pImg[2]->BitBlt(dc,x+9,y+135,s+2,t+2,0,0,SRCCOPY);

 	HistogSmooth(pg,10);
	CreateHistogram(pImg[2],pg,h,0,0);
 	pImg[2]->BitBlt(dc,x,y+n,s+20,h+20,0,0,SRCCOPY);

	CreateHistogram(pImg[2],pg,h,1,0);
 	pImg[2]->BitBlt(dc,x,y+2*n,s+20,h+20,0,0,SRCCOPY);
}

void CImageNView::OnImageInvert()
{
	ImageInvert(pImg[1]);
 	WorkCanvusToWindow();     
}

void CImageNView::OnHistogramType()
{
	struct		IMAGEPARAMENT P;
	int			x,y,h,s;
 	CClientDC	dc(this);
  
	ClearWindow(1);
	GetImageParament(pImg[1],&P);
 
 	x=P.nWidth+10;
	y=40;
	h=120;
 	s=256;
  
	CreateHistogramA(pImg[2],pImg[1],h,1);
 	pImg[2]->BitBlt(dc,x,y,s+20,h+50,0,0,SRCCOPY);
}

void CImageNView::OnImageHue()
{
	ToHSV(pImg[1],pImg[0],0);
	WorkCanvusToWindow();
}

void CImageNView::OnImageSaturation()
{
	ToHSV(pImg[1],pImg[0],1);
	WorkCanvusToWindow();
}

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

void CImageNView::OnCircularColorPlanes()
{
 	CClientDC	dc(this);
 	struct	IMAGEPARAMENT P;
  	int	    i,j,k,x,y,x1,y1;
 	BYTE	buf[768],hsv[768],*buffer;

	ClearWindow(1);
 	pImg[2]->Create(256,256,24,0);

    buffer=pImg[2]->GetPixelAddress(0,255);
	memset(buffer,255,256*256*3);
	
	hsv[2]=176;		
	x1=y1=0;
	k=4;
	for (i=0;i<360*k;i++) {
		hsv[0]=255*i/(360*k);
		for (j=100;j>=0;j--) {
			x=(int) (128+j*cos(-PI*i/(180*k))+0.5);
			y=(int) (128+j*sin(-PI*i/(180*k))+0.5);
			if ((x==x1)&&(y==y1)) continue;
			hsv[1]=255*j/100;
			HsvToRgb(buf,hsv,1);
			SetRectValue(pImg[2],x,y,1,1,buf);
			x1=x;
			y1=y;
 		}
	}
	DrawBox(pImg[2],0,0,256,256,1,0);
  
	GetImageParament(pImg[1],&P);
	if (pImg[1]->IsNull()) i=0;
	else i=P.nWidth;
  	pImg[2]->BitBlt(dc,i+10,10,256,256,0,0,SRCCOPY);
}

void CImageNView::OnHSPlane()
{
	CClientDC	dc(this);
 	struct	IMAGEPARAMENT P;
  	int	    i,j;
 	BYTE	buf[768],hsv[768];

	ClearWindow(1);
	pImg[2]->Create(258,258,24,0);

 	for (j=0;j<256;j++) hsv[3*j]=j;				
	for (j=0;j<256;j++) hsv[3*j+2]=255;				
	for (i=0;i<256;i++) {
		for (j=0;j<256;j++) hsv[3*j+1]=255-i;				
		HsvToRgb(buf,hsv,256);
		SetRectValue(pImg[2],1,i+1,256,1,buf);
	}
	DrawBox(pImg[2],0,0,258,258,1,0);

	GetImageParament(pImg[1],&P);
	if (pImg[1]->IsNull()) i=0;
	else i=P.nWidth;
 	pImg[2]->BitBlt(dc,i+10,10,258,258,0,0,SRCCOPY);
}

void CImageNView::OnSVPlane()
{
	CClientDC	dc(this);
 	struct	IMAGEPARAMENT P;
  	int	    i,j;
 	BYTE	buf[768],hsv[768];

	ClearWindow(1);
 	pImg[2]->Create(258,258,24,0);

 	for (j=0;j<256;j++) hsv[3*j]=0;				
	for (j=0;j<256;j++) hsv[3*j+1]=255-j;				
	for (i=0;i<256;i++) {
		for (j=0;j<256;j++) hsv[3*j+2]=255-i;				
		HsvToRgb(buf,hsv,256);
		SetRectValue(pImg[2],1,i+1,256,1,buf);
	}
	DrawBox(pImg[2],0,0,258,258,1,0);

	GetImageParament(pImg[1],&P);
	if (pImg[1]->IsNull()) i=0;
	else i=P.nWidth;
 	pImg[2]->BitBlt(dc,i+10,10,258,258,0,0,SRCCOPY);
}

void CImageNView::OnHVPlane()
{
	CClientDC	dc(this);
 	struct	IMAGEPARAMENT P;
  	int	    i,j;
 	BYTE	buf[768],hsv[768];

	ClearWindow(1);
 	pImg[2]->Create(258,258,24,0);

 	for (j=0;j<256;j++) hsv[3*j]=j;				
	for (j=0;j<256;j++) hsv[3*j+1]=255;				
	for (i=0;i<256;i++) {
		for (j=0;j<256;j++) hsv[3*j+2]=255-i;				
		HsvToRgb(buf,hsv,256);
		SetRectValue(pImg[2],1,i+1,256,1,buf);
	}
	DrawBox(pImg[2],0,0,258,258,1,0);

	GetImageParament(pImg[1],&P);
	if (pImg[1]->IsNull()) i=0;
	else i=P.nWidth;
 	pImg[2]->BitBlt(dc,i+10,10,258,258,0,0,SRCCOPY);
}

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

	ClearWindow(1);
 	GetImageParament(pImg[0],&P);
	buf=(BYTE*) malloc(P.nBytesPerLine);
	for (i=0;i<256;i++) {
		for (j=0;j<256;j++) {
			two_dim[i][j]=0;
		}
	}
	for (i=0;i<P.nHeight;i++) {
		GetRectValue(pImg[0],0,i,P.nWidth,1,buf);
		RgbToHsv(buf,buf,P.nWidth);
		for (j=0,m=0;j<P.nWidth;j++,m+=P.nBytesPerPixel) { 
 			two_dim[255-buf[m+1]][buf[m]]++;
		}
 	}
	free(buf);

	for (j=0;j<256;j++) pg[j]=0;
	for (j=0;j<256;j++) {
		for (i=0;i<256;i++) pg[j]+=two_dim[i][j];
	}
	dp=HueHistogShift(pg);

	pImg[2]->Destroy();
	pImg[2]->Create(256,256+10,8,0);
 	for (i=0;i<256;i++) {
		for (j=0;j<256;j++) { 
 			t=two_dim[i][j];
			if (t>255) t=255;
 			buf1[(j-dp+256)%256]=t;
 		}
		SetRectValue(pImg[2],0,i,256,1,buf1);
 	}
	PsendoColor(ColorTab);
	SetAllPalette(pImg[2],ColorTab);

	RectFillValue(pImg[2],0,256,256,10,32);
	RectFillValue(pImg[2],(0-dp+256)%256,256,1,10,255);
 	RectFillValue(pImg[2],(85-dp+256)%256,256,1,10,128);
 	RectFillValue(pImg[2],(170-dp+256)%256,256,1,10,0);
  
 	pImg[2]->BitBlt(dc,P.nWidth+40,40,256,256+10,0,0,SRCCOPY);
	dc.TextOut(P.nWidth+40+246,40+270,textbuf[0],lstrlen(textbuf[0]));
	dc.TextOut(P.nWidth+22,40,textbuf[1],lstrlen(textbuf[1]));
	dc.TextOut(P.nWidth+22,40+240,textbuf[3],lstrlen(textbuf[3]));
	dc.TextOut(P.nWidth+36+(0-dp+256)%256,40+270,textbuf[3],lstrlen(textbuf[3]));
}

void CImageNView::On2dimensionHistogramHv()
{
	CClientDC	dc(this);
 	struct	IMAGEPARAMENT P;
	RGBQUAD ColorTab[256];
	WORD	two_dim[256][256];
	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);
	buf=(BYTE*) malloc(P.nBytesPerLine);
	buf0=(BYTE*) malloc(P.nBytesPerLine);
	for (i=0;i<256;i++) {
		for (j=0;j<256;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-buf0[j]][buf[m]]++;
		}
 	}
	free(buf);
	free(buf0);

	for (j=0;j<256;j++) pg[j]=0;
	for (j=0;j<256;j++) {
		for (i=0;i<256;i++) pg[j]+=two_dim[i][j];
	}
	dp=HueHistogShift(pg);

	pImg[2]->Destroy();
	pImg[2]->Create(256,256+10,8,0);
 	for (i=0;i<256;i++) {
		for (j=0;j<256;j++) { 
 			t=two_dim[i][j];
			if (t>255) t=255;
 			buf1[(j-dp+256)%256]=t;
 		}
		SetRectValue(pImg[2],0,i,256,1,buf1);
 	}
	PsendoColor(ColorTab);
	SetAllPalette(pImg[2],ColorTab);

	RectFillValue(pImg[2],0,256,256,10,32);
	RectFillValue(pImg[2],(0-dp+256)%256,256,1,10,255);
 	RectFillValue(pImg[2],(85-dp+256)%256,256,1,10,128);
 	RectFillValue(pImg[2],(170-dp+256)%256,256,1,10,0);
  
 	pImg[2]->BitBlt(dc,P.nWidth+40,40,256,256+10,0,0,SRCCOPY);
	dc.TextOut(P.nWidth+40+246,40+270,textbuf[0],lstrlen(textbuf[0]));
	dc.TextOut(P.nWidth+22,40,textbuf[2],lstrlen(textbuf[2]));
	dc.TextOut(P.nWidth+22,40+240,textbuf[3],lstrlen(textbuf[3]));
	dc.TextOut(P.nWidth+36+(0-dp+256)%256,40+270,textbuf[3],lstrlen(textbuf[3]));
}

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

	ClearWindow(1);
 	GetImageParament(pImg[0],&P);
	buf =(BYTE*) malloc(P.nBytesPerLine);
	buf0=(BYTE*) malloc(P.nBytesPerLine);
	for (i=0;i<256;i++) {
		for (j=0;j<256;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]][buf0[j]]++;
		}
 	}
	free(buf);
	free(buf0);
 
	pImg[2]->Destroy();
	pImg[2]->Create(256,256+10,8,0);
 	for (i=0;i<256;i++) {
		for (j=0;j<256;j++) { 
 			t=two_dim[i][j];
			if (t>255) t=255;
 			buf1[j]=t;
 		}
		SetRectValue(pImg[2],0,i,256,1,buf1);
 	}
	PsendoColor(ColorTab);
	SetAllPalette(pImg[2],ColorTab);

	pImg[2]->BitBlt(dc,P.nWidth+40,40,256,256,0,0,SRCCOPY);
	dc.TextOut(P.nWidth+40+246,40+260,textbuf[2],lstrlen(textbuf[2]));
	dc.TextOut(P.nWidth+22,40,textbuf[1],lstrlen(textbuf[1]));
	dc.TextOut(P.nWidth+22,40+260,textbuf[3],lstrlen(textbuf[3]));
}

void CImageNView::OnRgbHistogram()
{
	struct		IMAGEPARAMENT P;
	int			x,y,h,n,s,t;
	long		pg[256];
	CClientDC	dc(this);
  	char	*textbuf[]={"","红分量直方图",
	                    "绿分量直方图","蓝分量直方图" };
  
	OnRefresh();
 	GetImageParament(pImg[0],&P);
 	x=P.nWidth+10;
	y=40;
	h=120;
 	n=180;
	s=256;
	t=20;
 
 	ColorHistogram(pImg[0],0,0,P.nWidth,P.nHeight,pg,3);
	CreateHistogram(pImg[2],pg,h,0,0);
 	pImg[2]->BitBlt(dc,x,y,s+20,h+20,0,0,SRCCOPY);
	dc.TextOut(P.nWidth+105,y+140,textbuf[1],lstrlen(textbuf[1]));
 
  	ColorHistogram(pImg[0],0,0,P.nWidth,P.nHeight,pg,2);
	CreateHistogram(pImg[2],pg,h,0,0);
 	pImg[2]->BitBlt(dc,x,y+n,s+20,h+20,0,0,SRCCOPY);
	dc.TextOut(P.nWidth+105,y+n+140,textbuf[2],lstrlen(textbuf[2]));

 	ColorHistogram(pImg[0],0,0,P.nWidth,P.nHeight,pg,1);
	CreateHistogram(pImg[2],pg,h,0,0);
 	pImg[2]->BitBlt(dc,x,y+2*n,s+20,h+20,0,0,SRCCOPY);
	dc.TextOut(P.nWidth+105,y+2*n+140,textbuf[3],lstrlen(textbuf[3]));
}

void CImageNView::OnHsvHistogram()
{
	struct		IMAGEPARAMENT P;
	int			x,y,h,n,s,t,dp;
	long		pg[256];
	CClientDC	dc(this);
  	char	*textbuf[]={"","色调直方图",
	                    "饱和度直方图","强度直方图" };
  
	OnRefresh();
	GetImageParament(pImg[0],&P);
 	x=P.nWidth+10;
	y=40;
	h=120;
 	n=180;
	s=256;
	t=20;
 
 	dp=ColorHistogram(pImg[0],0,0,P.nWidth,P.nHeight,pg,4);
	CreateHistogram(pImg[2],pg,h,0,dp);
 	pImg[2]->BitBlt(dc,x,y,s+20,h+20,0,0,SRCCOPY);
	dc.TextOut(P.nWidth+110,y+140,textbuf[1],lstrlen(textbuf[1]));
 
  	ColorHistogram(pImg[0],0,0,P.nWidth,P.nHeight,pg,5);
	CreateHistogram(pImg[2],pg,h,0,0);
 	pImg[2]->BitBlt(dc,x,y+n,s+20,h+20,0,0,SRCCOPY);
 	dc.TextOut(P.nWidth+105,y+n+140,textbuf[2],lstrlen(textbuf[2]));

 	ColorHistogram(pImg[0],0,0,P.nWidth,P.nHeight,pg,6);
	CreateHistogram(pImg[2],pg,h,0,0);
 	pImg[2]->BitBlt(dc,x,y+2*n,s+20,h+20,0,0,SRCCOPY);
	dc.TextOut(P.nWidth+110,y+2*n+140,textbuf[3],lstrlen(textbuf[3]));
}


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

void CImageNView::OnImageGreen()
{
	ToRGB(pImg[1],pImg[0],1);
	WorkCanvusToWindow();
}

void CImageNView::OnImageBlue()
{
	ToRGB(pImg[1],pImg[0],0);
	WorkCanvusToWindow();
}

void CImageNView::OnSobelGradOr()
{
	ColorSobel(pImg[1],pImg[0],0);
	WorkCanvusToWindow();
}

void CImageNView::OnColorSobel()
{
	ColorSobel(pImg[1],pImg[0],1);
	WorkCanvusToWindow();
}

void CImageNView::OnColorSobelVector()
{

⌨️ 快捷键说明

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