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

📄 waveletdoc.cpp

📁 this walet there is pictures in it you can debug it
💻 CPP
📖 第 1 页 / 共 3 页
字号:

void CWaveletDoc::OnOptionValue() 
{
	// TODO: Add your command handler code here
	// TODO: Add your command handler code here
	CompressOption CpOption;
	if (CpOption.DoModal() == IDOK)
		minthr=CpOption.m_posvalue;
	return;
}

void CWaveletDoc::OnFilterBlur() 
{
	// TODO: Add your command handler code here
	// TODO: Add your command handler code here
	//读取数字图像的文件头,获取图像的属性参数
	LPBITMAPINFOHEADER lpBitmapInfoHeader = (LPBITMAPINFOHEADER)(m_pBitmap+14);
	LPBITMAPFILEHEADER lpBitmapFileHeader = (LPBITMAPFILEHEADER)m_pBitmap;
	unsigned char *lpData = m_pBitmap + lpBitmapFileHeader->bfOffBits;
	unsigned long biHeight = lpBitmapInfoHeader->biHeight;
	unsigned long biWidth = lpBitmapInfoHeader->biWidth;
	unsigned long biAlign = (biWidth*3+3)/4 *4;
	unsigned long bmSize = biHeight * biAlign;
	if(m_pTransfered==NULL)
		m_pTransfered=(unsigned char*) malloc (bmSize);
	if(m_pTransfered==NULL)
		return;
	//图像小波系数的低通滤波层数为3层
	int MaxLayer = 3;
	short **ImgData;
	float fTempBufforDisp;	
	//图像矩阵坐标与图像数据
	int tempR, tempG, tempB, x, y, cur;
	//分配图像数据的内存空间
	ImgData = new short * [biHeight];
	for(int i = 0; i < biHeight; i ++)
	{
		ImgData[i] = new short [biWidth];
	}
	
	for(i=0;i<=2;i++)
{
	//获取显示缓存中的原始图像数据
	for(y=0; y<(int)biHeight; y++)
	{
		for(x=0; x<(int)biWidth; x++)
		{
			cur = y*biAlign+3*x;
			
			//tempB=lpData[cur];
			//tempG=lpData[cur+1];
			//tempR=lpData[cur+2];
			//ImgData[biHeight-1-y][x]=(short)(0.3*tempR+0.59*tempG+0.11*tempB);  //no problem
		ImgData[biHeight-1-y][x]=(short)(lpData[cur+i]);
		}
	}


	//创建小波滤波器类


	CWFilter Filter;
	//小波低通滤波处理

	Filter.LPass_Filter(ImgData, biHeight, biWidth, MaxLayer, 1);
	//屏蔽图像复原操作标志
	m_bFilter = TRUE;
	//将处理后的图像数据放入显示缓存中
	for(y=0; y<(int)biHeight; y++)
	{
		for(x=0; x<(int)biWidth; x++)
		{
			cur= y*biAlign+3*x;		//当前像素的位置	
		m_pTransfered[cur+i]	= (unsigned char)Filter.m_FilterData[biHeight - 1- y][x];
		//m_pTransfered[cur+1]= (unsigned char)Filter.m_FilterData[biHeight - 1 - y][x];
		//m_pTransfered[cur+2]= (unsigned char)Filter.m_FilterData[biHeight - 1 - y][x];
		
		}
	}
}
	//显示图像
delete m_WaveletCoeff;
	m_WaveletCoeff=NULL;
	UpdateAllViews(NULL);
	//删除临时的图像数据空间
	delete ImgData;
}

void CWaveletDoc::OnFilterBlur2() 
{
	// TODO: Add your command handler code here
	//读取数字图像的文件头,获取图像的属性参数
	LPBITMAPINFOHEADER lpBitmapInfoHeader = (LPBITMAPINFOHEADER)(m_pBitmap+14);
	LPBITMAPFILEHEADER lpBitmapFileHeader = (LPBITMAPFILEHEADER)m_pBitmap;
	unsigned char *lpData = m_pBitmap + lpBitmapFileHeader->bfOffBits;
	unsigned long biHeight = lpBitmapInfoHeader->biHeight;
	unsigned long biWidth = lpBitmapInfoHeader->biWidth;
	unsigned long biAlign = (biWidth*3+3)/4 *4;
	unsigned long bmSize = biHeight * biAlign;
	if(m_pTransfered==NULL)
		m_pTransfered=(unsigned char*) malloc (bmSize);
	if(m_pTransfered==NULL)
		return;
	//图像小波系数的低通滤波层数为3层
	int MaxLayer = 3;
	short **ImgData;
	float fTempBufforDisp;	
	//图像矩阵坐标与图像数据
	int tempR, tempG, tempB, x, y, cur;
	//分配图像数据的内存空间
	ImgData = new short * [biHeight];
	for(int i = 0; i < biHeight; i ++)
	{
		ImgData[i] = new short [biWidth];
	}
	//获取显示缓存中的原始图像数据
	for(i=0;i<=2;i++)
	{
		for(y=0; y<(int)biHeight; y++)
	{
		for(x=0; x<(int)biWidth; x++)
		{
			cur = y*biAlign+3*x;
			//tempB=lpData[cur];
			//tempG=lpData[cur+1];
			//tempR=lpData[cur+2];
			//ImgData[biHeight-1-y][x]=(short)(0.3*tempR+0.59*tempG+0.11*tempB);  //no problem
	ImgData[biHeight-1-y][x]=(short)(lpData[cur+i]);
		}
	}
	
	//创建小波滤波器类
	CWFilter Filter;
	//小波低通滤波处理
	Filter.LPass_Filter(ImgData, biHeight, biWidth, MaxLayer, 2);
	//屏蔽图像复原操作标志
	m_bFilter = TRUE;
	//将处理后的图像数据放入显示缓存中
	for(y=0; y<(int)biHeight; y++)
	{
		for(x=0; x<(int)biWidth; x++)
		{
			cur= y*biAlign+3*x;		//当前像素的位置	
			m_pTransfered[cur]	= (unsigned char)Filter.m_FilterData[biHeight - 1- y][x];
			m_pTransfered[cur+1]= (unsigned char)Filter.m_FilterData[biHeight - 1 - y][x];
			m_pTransfered[cur+2]= (unsigned char)Filter.m_FilterData[biHeight - 1 - y][x];
		}
	}
	}
	//显示图像
	UpdateAllViews(NULL);
	//删除临时的图像数据空间
	delete ImgData;
}

void CWaveletDoc::OnFilterSharpness() 
{
	// TODO: Add your command handler code here
	//读取数字图像的文件头,获取图像的属性参数
	LPBITMAPINFOHEADER lpBitmapInfoHeader = (LPBITMAPINFOHEADER)(m_pBitmap+14);
	LPBITMAPFILEHEADER lpBitmapFileHeader = (LPBITMAPFILEHEADER)m_pBitmap;
	unsigned char *lpData = m_pBitmap + lpBitmapFileHeader->bfOffBits;
	unsigned long biHeight = lpBitmapInfoHeader->biHeight;
	unsigned long biWidth = lpBitmapInfoHeader->biWidth;
	unsigned long biAlign = (biWidth*3+3)/4 *4;
	unsigned long bmSize = biHeight * biAlign;
	if(m_pTransfered==NULL)
		m_pTransfered=(unsigned char*) malloc (bmSize);
	if(m_pTransfered==NULL)
		return;
	//图像小波系数的高通滤波层数为3层
	int MaxLayer = 3;
	short **ImgData;
	float fTempBufforDisp;	
	//图像矩阵坐标与图像数据
	int tempR, tempG, tempB, x, y, cur;
	//分配图像数据的内存空间
	ImgData = new short * [biHeight];
	for(int i = 0; i < biHeight; i ++)
	{
		ImgData[i] = new short [biWidth];
	}
	//获取显示缓存中的原始图像数据
	for(i=0;i<=2;i++)
	{
		for(y=0; y<(int)biHeight; y++)
	{
		for(x=0; x<(int)biWidth; x++)
		{
			cur = y*biAlign+3*x;
		//	tempB=lpData[cur];
			//tempG=lpData[cur+1];
			//tempR=lpData[cur+2];
			//ImgData[biHeight-1-y][x]=(short)(0.3*tempR+0.59*tempG+0.11*tempB);  //no problem
		ImgData[biHeight-1-y][x]=(short)(lpData[cur+i]);
		}
	}

	//创建小波滤波器类
	CWFilter Filter;
	//小波高通滤波处理
	Filter.HPass_Filter(ImgData, biHeight, biWidth, MaxLayer);
	//屏蔽图像复原操作标志
	m_bFilter = TRUE;
	//将处理后的图像数据放入显示缓存中
	for(y=0; y<(int)biHeight; y++)
	{
		for(x=0; x<(int)biWidth; x++)
		{
			cur= y*biAlign+3*x;		//当前像素的位置	
			m_pTransfered[cur+i]	= (unsigned char)Filter.m_FilterData[biHeight - 1- y][x];
			//m_pTransfered[cur+1]= (unsigned char)Filter.m_FilterData[biHeight - 1 - y][x];
			//m_pTransfered[cur+2]= (unsigned char)Filter.m_FilterData[biHeight - 1 - y][x];
		}
	}
	}
	//显示图像
	UpdateAllViews(NULL);
	//删除临时的图像数据空间
	delete ImgData;
}

void CWaveletDoc::OnFilterSharpness2() 
{
	// TODO: Add your command handler code here
	//读取数字图像的文件头,获取图像的属性参数
	LPBITMAPINFOHEADER lpBitmapInfoHeader = (LPBITMAPINFOHEADER)(m_pBitmap+14);
	LPBITMAPFILEHEADER lpBitmapFileHeader = (LPBITMAPFILEHEADER)m_pBitmap;
	unsigned char *lpData = m_pBitmap + lpBitmapFileHeader->bfOffBits;
	unsigned long biHeight = lpBitmapInfoHeader->biHeight;
	unsigned long biWidth = lpBitmapInfoHeader->biWidth;
	unsigned long biAlign = (biWidth*3+3)/4 *4;
	unsigned long bmSize = biHeight * biAlign;
	if(m_pTransfered==NULL)
		m_pTransfered=(unsigned char*) malloc (bmSize);
	if(m_pTransfered==NULL)
		return;
	//图像小波系数的高通滤波层数为3层
	int MaxLayer = 3;
	short **ImgData;
	float fTempBufforDisp;	
	//图像矩阵坐标与图像数据
	int tempR, tempG, tempB, x, y, cur;
	//分配图像数据的内存空间
	ImgData = new short * [biHeight];
	for(int i = 0; i < biHeight; i ++)
	{
		ImgData[i] = new short [biWidth];
	}
	//获取显示缓存中的原始图像数据
	for(i=0;i<2;i++)
	{
	for(y=0; y<(int)biHeight; y++)
	{
		for(x=0; x<(int)biWidth; x++)
		{
			cur = y*biAlign+3*x;
			//tempB=lpData[cur];
			//tempG=lpData[cur+1];
			//tempR=lpData[cur+2];
			//ImgData[biHeight-1-y][x]=(short)(0.3*tempR+0.59*tempG+0.11*tempB);  //no problem
		}
	}
	}
	//创建小波滤波器类
	CWFilter Filter;
	//小波高通滤波处理
	Filter.HPass_Filter2(ImgData, biHeight, biWidth, MaxLayer);
	//屏蔽图像复原操作标志
	m_bFilter = TRUE;
	//将处理后的图像数据放入显示缓存中
	for(y=0; y<(int)biHeight; y++)
	{
		for(x=0; x<(int)biWidth; x++)
		{
			cur= y*biAlign+3*x;		//当前像素的位置	
			m_pTransfered[cur]	= (unsigned char)Filter.m_FilterData[biHeight - 1- y][x];
			m_pTransfered[cur+1]= (unsigned char)Filter.m_FilterData[biHeight - 1 - y][x];
			m_pTransfered[cur+2]= (unsigned char)Filter.m_FilterData[biHeight - 1 - y][x];
		}
	}
	//显示图像
	UpdateAllViews(NULL);
	//删除临时的图像数据空间
	delete ImgData;
}

void CWaveletDoc::OnCodeDecode() 
{
	// TODO: Add your command handler code here
CEzwCode Ezw;
	int k=0;
	LPBITMAPINFOHEADER lpBitmapInfoHeader = (LPBITMAPINFOHEADER)(m_pBitmap+14);

	int biHeight = lpBitmapInfoHeader->biHeight;
	int biWidth = lpBitmapInfoHeader->biWidth;

    for (k=0;k<=2;k++)
		Ezw.HuffmanDecode(minthr,biHeight,biWidth,k,m_pstore,fsize);
	return;		
}

void CWaveletDoc::OnResult() 
{
	// TODO: Add your command handler code here
	
}

void CWaveletDoc::OnDiprocFusion() 
{
// TODO: Add your command handler code here
	//读取数字图像的文件头,获取图像的属性参数
	LPBITMAPINFOHEADER lpBitmapInfoHeader = (LPBITMAPINFOHEADER)(m_pBitmap+14);
	LPBITMAPFILEHEADER lpBitmapFileHeader = (LPBITMAPFILEHEADER)m_pBitmap;
	unsigned char *lpData = m_pBitmap + lpBitmapFileHeader->bfOffBits;
	unsigned long biHeight = lpBitmapInfoHeader->biHeight;
	unsigned long biWidth = lpBitmapInfoHeader->biWidth;
	unsigned long biAlign = (biWidth*3+3)/4 *4;
	unsigned long bmSize = biHeight * biAlign;
	//定义图像的内存数据空间指针
	short **pData, **pDataFusion;
	CString cstrFileName = m_strFileFusion;
	//图像矩阵的坐标与像素数据
	int x, y, cur;
	int tempR, tempG, tempB;
	//分配图像的数据空间
	pData = new short * [biHeight];
	pDataFusion = new short * [biHeight];
	for(int i = 0; i < biWidth; i ++)
	{
		pDataFusion[i] = new short [biWidth];
		pData[i] = new short [biWidth];
	}
	//从设备的显示缓存中获取原始图像的数据
	for(y = 0; y < (int) biHeight; y ++)
	{
		for(x = 0; x < (int) biWidth; x ++)
		{
			cur = y * biAlign + 3 * x;
			tempB = lpData[cur];
			tempG = lpData[cur + 1];
			tempR = lpData[cur + 2];
			pData[biHeight - 1 - y][x] = 0.3 * tempR + 0.59 * tempG + 0.11 * tempB;
		}
	}
	//释放设备占用的显示缓存
	//m_pBitmap = NULL;
	//打开另外一幅用于融合的图像文件
	MessageBoxA(NULL,_T("请在WvltDip\\Fusion目录中打开另外一幅图像,进行图像融合"),_T("Message"),MB_ICONEXCLAMATION|MB_OK);
	while(!abs((int)strcmp(m_strFileFusion, cstrFileName)))
	{
		CFileDialog dlg( TRUE,NULL,NULL,
	                 OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
	                 _T("Bitmap (*.BMP)|*.BMP|"));
		if( dlg.DoModal()==IDOK )
			cstrFileName = dlg.GetPathName();
		//如果文件重名,提示重新打开文件
		if(!abs((int)strcmp(m_strFileFusion, cstrFileName))) 
			MessageBoxA(NULL,_T("文件"+m_strFileFusion+"已打开,请打开该目录中另外一个文件"),_T("Message"),MB_ICONEXCLAMATION|MB_OK);
		else
			MessageBoxA(NULL,_T("用于图像融合的文件是:\n"+m_strFileFusion+"\n"+cstrFileName),_T("Message"),MB_ICONEXCLAMATION|MB_OK);
	}
	//读取位图数据,载入显示缓存中
	ReadBitmap(cstrFileName, m_pTransfered);
	//显示新打开的图像
	UpdateAllViews(NULL);
	//读取另外一幅图像的数据
	lpBitmapInfoHeader = (LPBITMAPINFOHEADER)(m_pTransfered+14);
	lpBitmapFileHeader = (LPBITMAPFILEHEADER)m_pTransfered;
	unsigned char *lpImgData = m_pTransfered + lpBitmapFileHeader->bfOffBits;
	//从设备的显示缓存中获取原始图像的数据
	for(y = 0; y < biHeight; y ++)
	{
		for (x = 0; x < biWidth; x++)
		{
			cur = y * biAlign + 3 * x;
			tempB = lpImgData[cur];
			tempG = lpImgData[cur + 1];
			tempR = lpImgData[cur + 2];
			pDataFusion[biHeight - 1 - y][x] = 0.3 * tempR + 0.59 * tempG + 0.11 * tempB;
		}
	}
	//清空显示缓存,并重新分配显示缓存
	m_pTransfered = NULL;
	m_pTransfered=(unsigned char*) malloc (bmSize);
	if(m_pTransfered==NULL)
		return;
	//创建用于图像融合的Diproc类
	CDiproc *pDIP;
	pDIP->DIP_ImageFusion(pData, pDataFusion, biHeight, biWidth);
	//将图像数据放入显示缓存中
	for(y=0; y<(int)biHeight; y++)
	{
		for(x=0; x<(int)biWidth; x++)
		{
			cur= y*biAlign+3*x;		//current pixel	
			m_pTransfered[cur]	= (unsigned char)pDataFusion[biHeight - 1- y][x];
			m_pTransfered[cur+1]= (unsigned char)pDataFusion[biHeight - 1 - y][x];
			m_pTransfered[cur+2]= (unsigned char)pDataFusion[biHeight - 1 - y][x];
		}
	}
	//显示图像复原的结果
	UpdateAllViews(NULL);
	//删除临时的数据内存空间
	delete pData;
	delete pDataFusion;		
}

⌨️ 快捷键说明

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