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

📄 watermark.cpp

📁 十分详细的基于Wavelet的图像水印嵌入程序
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	dlgPointGrayStretch.m_nGrayX1=nGrayX1;
	dlgPointGrayStretch.m_nGrayX2=nGrayX2;
	dlgPointGrayStretch.m_nGrayY1=nGrayY1;
	dlgPointGrayStretch.m_nGrayY2=nGrayY2;
		
	CImageVisualDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	long i,j,l;
	long lgSizePicture;
	int *pn;
	BYTE *pb;

	if(dlgPointGrayStretch.DoModal()!=IDOK)
	{
		return;
	}
	
	nGrayX1=dlgPointGrayStretch.m_nGrayX1;
	nGrayX2=dlgPointGrayStretch.m_nGrayX2;
	nGrayY1=dlgPointGrayStretch.m_nGrayY1;
	nGrayY2=dlgPointGrayStretch.m_nGrayY2;

	delete dlgPointGrayStretch;

	lgSizePicture=(long)pDoc->m_nOriHeight*(long)pDoc->m_nOriWidth;
	

	if( pDoc->m_nOriBitCount== 8 )
	{
		for(i=0;i<lgSizePicture;i++)
		{
			
			if(*(pDoc->pnOriPic+i)<nGrayX1)
			{
				*(pDoc->pnOriPic+i)=(int)(((float)*(pDoc->pnOriPic+i)*(float)nGrayY1)/(float)(nGrayX1));
			}else if((*(pDoc->pnOriPic+i)>=nGrayX1) && (*(pDoc->pnOriPic+i)<=nGrayX2))
			{
				*(pDoc->pnOriPic+i)=(int)(((float)*(pDoc->pnOriPic+i)-(float)nGrayX1)*((float)nGrayY2-(float)nGrayY1)/((float)nGrayX2-(float)nGrayX1)+(float)nGrayY1);
			}else if(*(pDoc->pnOriPic+i)>nGrayX2)
			{
				*(pDoc->pnOriPic+i)=(int)(((float)*(pDoc->pnOriPic+i)-(float)nGrayX1)*(255.0-(float)nGrayY2)/(255.0-(float)nGrayX2)+(float)nGrayY2);					
			}

		}
	}
	else if( pDoc->m_nOriBitCount==24 )
	{
		for(i=0;i<lgSizePicture;i++)
		{
			for(int p=0;p<3;p++)
			{
				if(*(pDoc->pnOriPic+i)<nGrayX1)
				{
					*(pDoc->pnOriPic+3*i+p)=(int)(((float)*(pDoc->pnOriPic+3*i+p)*(float)nGrayY1)/(float)(nGrayX1));
				}else if((*(pDoc->pnOriPic+3*i+p)>=nGrayX1) && (*(pDoc->pnOriPic+3*i+p)<=nGrayX2))
				{
					*(pDoc->pnOriPic+3*i+p)=(int)(((float)*(pDoc->pnOriPic+3*i+p)-(float)nGrayX1)*((float)nGrayY2-(float)nGrayY1)/((float)nGrayX2-(float)nGrayX1)+(float)nGrayY1);
				}else if(*(pDoc->pnOriPic+3*i+p)>nGrayX2)
				{
					*(pDoc->pnOriPic+3*i+p)=(int)(((float)*(pDoc->pnOriPic+3*i+p)-(float)nGrayX1)*(255.0-(float)nGrayY2)/(255.0-(float)nGrayX2)+(float)nGrayY2);					
				}
			}
		}


	}
		
	pb=pDoc->pbOriStatic;
	pn=pDoc->pnOriPic;

	if(pDoc->m_nOriBitCount==24)
	{
		for(j=0;j<pDoc->m_nOriHeight;j++){
			for(i=0;i<pDoc->m_nOriWidth ;i++){
				for(l=0;l<3;l++){
					*pDoc->pbOriStatic=(BYTE)*pDoc->pnOriPic;
					pDoc->pnOriPic=pDoc->pnOriPic+1;
					pDoc->pbOriStatic=pDoc->pbOriStatic+1;						
				}						//for l
			}							//for i
			if(((pDoc->m_nOriWidth*3)%4)!=0){		//加入附加字节
				pDoc->pbOriStatic=pDoc->pbOriStatic+4-((pDoc->m_nOriWidth*3)%4);
			}
		}
	}else if(pDoc->m_nOriBitCount==8)
	{
		for(j=0;j<pDoc->m_nOriHeight;j++){
			for(i=0;i<pDoc->m_nOriWidth ;i++){
				*pDoc->pbOriStatic=(BYTE)*pDoc->pnOriPic;
				pDoc->pnOriPic=pDoc->pnOriPic+1;
				pDoc->pbOriStatic=pDoc->pbOriStatic+1;						
			
			}							//for i
			if(((pDoc->m_nOriWidth)%4)!=0){		//加入附加字节
				pDoc->pbOriStatic=pDoc->pbOriStatic+4-((pDoc->m_nOriWidth)%4);
			}
		}
	}
	pDoc->pbOriStatic=pb;
	pDoc->pnOriPic=pn;
	Invalidate();	
}

void CImageVisualView::OnPointInteEqualize() 
{
	// TODO: Add your command handler code here
	CImageVisualDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	int nSizePic;
	nSizePic=pDoc->m_nOriHeight*pDoc->m_nOriWidth;
	int i,p;
	int nNumberPoint[256],nColorNumber[256][3],nSumNumberPoint[256],nSumColorNumber[256][3];

	for(i=0;i<256;i++)
	{
		nNumberPoint[i]=0;
		for(p=0;p<3;p++)
			nColorNumber[i][p]=0;
	}


	if(pDoc->m_nOriBitCount==8)
	{
		for(i=0;i<nSizePic;i++)
		{
			nNumberPoint[*(pDoc->pnOriPic+i)]++;
		}
	}else if(pDoc->m_nOriBitCount==24)
	{
		for(i=0;i<nSizePic;i++)
		{
			for(p=0;p<3;p++)
			{
				nColorNumber[*(pDoc->pnOriPic+i*3+p)][p]++;
			}
		}
	}

	if(pDoc->m_nOriBitCount==8)
	{
		nSumNumberPoint[0]=nNumberPoint[0];
		for(i=1;i<256;i++)
		{
			nSumNumberPoint[i]=nSumNumberPoint[i-1]+nNumberPoint[i];
		}
	}else if(pDoc->m_nOriBitCount==24)
	{
		for(p=0;p<3;p++)
		{
			nSumColorNumber[0][p]=nColorNumber[0][p];
		}
		for(i=1;i<256;i++)
		{
			for(p=0;p<3;p++)
			{
				nSumColorNumber[i][p]=nSumColorNumber[i-1][p]+nColorNumber[i][p];
			}
		}
	}

	if( pDoc->m_nOriBitCount== 8 )
	{
		for(i=0;i<nSizePic;i++)
		{
			
			*(pDoc->pnOriPic+i)=(int)(((float)nSumNumberPoint[*(pDoc->pnOriPic+i)]*255.0)/(float)(nSizePic));
		}
	}
	else if( pDoc->m_nOriBitCount==24 )
	{
		for(i=0;i<nSizePic;i++)
		{
			for(int p=0;p<3;p++)
			{
				*(pDoc->pnOriPic+3*i+p)=(int)(((float)nSumColorNumber[*(pDoc->pnOriPic+3*i+p)][p]*255.0)/(float)(nSizePic));
			}
		}


	}
	
	int *pn;
	BYTE *pb;
	int j,l;
		
	pb=pDoc->pbOriStatic;
	pn=pDoc->pnOriPic;

	if(pDoc->m_nOriBitCount==24)
	{
		for(j=0;j<pDoc->m_nOriHeight;j++){
			for(i=0;i<pDoc->m_nOriWidth ;i++){
				for(l=0;l<3;l++){
					*pDoc->pbOriStatic=(BYTE)*pDoc->pnOriPic;
					pDoc->pnOriPic=pDoc->pnOriPic+1;
					pDoc->pbOriStatic=pDoc->pbOriStatic+1;						
				}						//for l
			}							//for i
			if(((pDoc->m_nOriWidth*3)%4)!=0){		//加入附加字节
				pDoc->pbOriStatic=pDoc->pbOriStatic+4-((pDoc->m_nOriWidth*3)%4);
			}
		}
	}else if(pDoc->m_nOriBitCount==8)
	{
		for(j=0;j<pDoc->m_nOriHeight;j++){
			for(i=0;i<pDoc->m_nOriWidth ;i++){
				*pDoc->pbOriStatic=(BYTE)*pDoc->pnOriPic;
				pDoc->pnOriPic=pDoc->pnOriPic+1;
				pDoc->pbOriStatic=pDoc->pbOriStatic+1;						
			
			}							//for i
			if(((pDoc->m_nOriWidth)%4)!=0){		//加入附加字节
				pDoc->pbOriStatic=pDoc->pbOriStatic+4-((pDoc->m_nOriWidth)%4);
			}
		}
	}
	pDoc->pbOriStatic=pb;
	pDoc->pnOriPic=pn;
	Invalidate();	

}


void CImageVisualView::OnGeoTranslation() 
{
	// TODO: Add your command handler code here
	int nOffSetX=50;
	int nOffSetY=50;
	CImageVisualDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	int i,j;
	CDialogGeoTranslation dlgGeoTranslation;
	int *pnTemp;

	dlgGeoTranslation.m_nOffSetX=nOffSetX;
	dlgGeoTranslation.m_nOffSetY=nOffSetY;
	int nSizePic;

	nSizePic=pDoc->m_nOriHeight*pDoc->m_nOriWidth;


	if(dlgGeoTranslation.DoModal()!=IDOK)
	{
		return;
	}

	nOffSetX=dlgGeoTranslation.m_nOffSetX;
	nOffSetY=dlgGeoTranslation.m_nOffSetY;

	if( pDoc->m_nOriBitCount== 8 )
	{
		pnTemp= new int [(long)pDoc->m_nOriHeight*(long)pDoc->m_nOriWidth];
		memcpy( pnTemp,pDoc->pnOriPic , sizeof(int)*nSizePic );
		for(i=0;i<pDoc->m_nOriHeight;i++)
		{
			for(j=0;j<pDoc->m_nOriWidth;j++)
			{
				if(j<nOffSetX || i<nOffSetY)
				{
					*(pDoc->pnOriPic+(pDoc->m_nOriHeight-i-1)*pDoc->m_nOriWidth+j)=255;
				}else 
				{
					*(pDoc->pnOriPic+(pDoc->m_nOriHeight-i-1)*pDoc->m_nOriWidth+j)=*(pnTemp+(pDoc->m_nOriHeight-i-1+nOffSetY)*pDoc->m_nOriWidth+j-nOffSetX);
				}
			}
		}
//		memcpy( pDoc->pnOriPic,pnTemp , sizeof(int)*nSizePic );
	}
	else if( pDoc->m_nOriBitCount==24 )
	{
		pnTemp= new int [(long)pDoc->m_nOriHeight*(long)pDoc->m_nOriWidth*3];
		memcpy( pnTemp,pDoc->pnOriPic , sizeof(int)*nSizePic );

		for(i=0;i<pDoc->m_nOriHeight;i++)
		{
			for(j=0;j<pDoc->m_nOriWidth;j++)
			{
				for(int p=0;p<3;p++)
				{
					if(j<nOffSetX || i<nOffSetY)
					{
						*(pDoc->pnOriPic+(pDoc->m_nOriHeight-i-1)*pDoc->m_nOriWidth*3+j*3+p)=255;
					}else 
					{
						*(pDoc->pnOriPic+(pDoc->m_nOriHeight-i-1)*pDoc->m_nOriWidth*3+j*3+p)=*(pnTemp+(pDoc->m_nOriHeight-i-1+nOffSetY)*pDoc->m_nOriWidth*3+(j-nOffSetX)*3+p);
					}
				}
			}
		}
//		memcpy( pDoc->pnOriPic,pnTemp , sizeof(int)*nSizePic );
	}
	int *pn;
	BYTE *pb;
	int l;
		
	pb=pDoc->pbOriStatic;
	pn=pDoc->pnOriPic;

	if(pDoc->m_nOriBitCount==24)
	{
		for(j=0;j<pDoc->m_nOriHeight;j++){
			for(i=0;i<pDoc->m_nOriWidth ;i++){
				for(l=0;l<3;l++){
					*pDoc->pbOriStatic=(BYTE)*pDoc->pnOriPic;
					pDoc->pnOriPic=pDoc->pnOriPic+1;
					pDoc->pbOriStatic=pDoc->pbOriStatic+1;						
				}						//for l
			}							//for i
			if(((pDoc->m_nOriWidth*3)%4)!=0){		//加入附加字节
				pDoc->pbOriStatic=pDoc->pbOriStatic+4-((pDoc->m_nOriWidth*3)%4);
			}
		}
	}else if(pDoc->m_nOriBitCount==8)
	{
		for(j=0;j<pDoc->m_nOriHeight;j++){
			for(i=0;i<pDoc->m_nOriWidth ;i++){
				*pDoc->pbOriStatic=(BYTE)*pDoc->pnOriPic;
				pDoc->pnOriPic=pDoc->pnOriPic+1;
				pDoc->pbOriStatic=pDoc->pbOriStatic+1;						
			
			}							//for i
			if(((pDoc->m_nOriWidth)%4)!=0){		//加入附加字节
				pDoc->pbOriStatic=pDoc->pbOriStatic+4-((pDoc->m_nOriWidth)%4);
			}
		}
	}
	pDoc->pbOriStatic=pb;
	pDoc->pnOriPic=pn;
	Invalidate();
	free(pnTemp);
}

void CImageVisualView::OnGeoMirrorS() 
{
	// TODO: Add your command handler code here
	int nOffSetX=50;
	int nOffSetY=50;

	CImageVisualDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	int i,j;

	int *pnTemp;

	int nSizePic;

	nSizePic=pDoc->m_nOriHeight*pDoc->m_nOriWidth;

	if( pDoc->m_nOriBitCount== 8 )
	{
		pnTemp= new int [(long)pDoc->m_nOriHeight*(long)pDoc->m_nOriWidth];
		memcpy( pnTemp,pDoc->pnOriPic , sizeof(int)*nSizePic );
		for(i=0;i<pDoc->m_nOriHeight;i++)
		{
			for(j=0;j<pDoc->m_nOriWidth;j++)
			{
				*(pDoc->pnOriPic+(pDoc->m_nOriHeight-i-1)*pDoc->m_nOriWidth+j)=*(pnTemp+(pDoc->m_nOriHeight-i-1)*pDoc->m_nOriWidth+(pDoc->m_nOriWidth-1-j));
			}
		}
//		memcpy( pDoc->pnOriPic,pnTemp , sizeof(int)*nSizePic );
	}
	else if( pDoc->m_nOriBitCount==24 )
	{
		pnTemp= new int [(long)pDoc->m_nOriHeight*(long)pDoc->m_nOriWidth*3];
		memcpy( pnTemp,pDoc->pnOriPic , sizeof(int)*nSizePic );

		for(i=0;i<pDoc->m_nOriHeight;i++)
		{
			for(j=0;j<pDoc->m_nOriWidth;j++)
			{
				for(int p=0;p<3;p++)
				{
					for(j=0;j<pDoc->m_nOriWidth;j++)
					{
						*(pDoc->pnOriPic+(pDoc->m_nOriHeight-i-1)*pDoc->m_nOriWidth*3+j*3+p)=*(pnTemp+(pDoc->m_nOriHeight-i-1)*pDoc->m_nOriWidth*3+(pDoc->m_nOriWidth-1-j)*3+p);
					}
				}
			}
		}
//		memcpy( pDoc->pnOriPic,pnTemp , sizeof(int)*nSizePic );
	}
	int *pn;
	BYTE *pb;
	int l;
		
	pb=pDoc->pbOriStatic;
	pn=pDoc->pnOriPic;

	if(pDoc->m_nOriBitCount==24)
	{
		for(j=0;j<pDoc->m_nOriHeight;j++){
			for(i=0;i<pDoc->m_nOriWidth ;i++){
				for(l=0;l<3;l++){
					*pDoc->pbOriStatic=(BYTE)*pDoc->pnOriPic;
					pDoc->pnOriPic=pDoc->pnOriPic+1;
					pDoc->pbOriStatic=pDoc->pbOriStatic+1;						
				}						//for l
			}							//for i
			if(((pDoc->m_nOriWidth*3)%4)!=0){		//加入附加字节
				pDoc->pbOriStatic=pDoc->pbOriStatic+4-((pDoc->m_nOriWidth*3)%4);
			}
		}
	}else if(pDoc->m_nOriBitCount==8)
	{
		for(j=0;j<pDoc->m_nOriHeight;j++){
			for(i=0;i<pDoc->m_nOriWidth ;i++){
				*pDoc->pbOriStatic=(BYTE)*pDoc->pnOriPic;
				pDoc->pnOriPic=pDoc->pnOriPic+1;
				pDoc->pbOriStatic=pDoc->pbOriStatic+1;						
			
			}							//for i
			if(((pDoc->m_nOriWidth)%4)!=0){		//加入附加字节
				pDoc->pbOriStatic=pDoc->pbOriStatic+4-((pDoc->m_nOriWidth)%4);
			}
		}
	}
	pDoc->pbOriStatic=pb;
	pDoc->pnOriPic=pn;
	Invalidate();
	free(pnTemp);
}

void CImageVisualView::OnGeoMirrorH() 
{
	// TODO: Add your command handler code here
	int nOffSetX=50;
	int nOffSetY=50;

	CImageVisualDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	int i,j;

	int *pnTemp;

	int nSizePic;

	nSizePic=pDoc->m_nOriHeight*pDoc->m_nOriWidth;

	if( pDoc->m_nOriBitCount== 8 )
	{
		pnTemp= new int [(long)pDoc->m_nOriHeight*(long)pDoc->m_nOriWidth];
		memcpy( pnTemp,pDoc->pnOriPic , sizeof(int)*nSizePic );
		for(i=0;i<pDoc->m_nOriHeight;i++)
		{
			for(j=0;j<pDoc->m_nOriWidth;j++)
			{
				*(pDoc->pnOriPic+i*pDoc->m_nOriWidth+j)=*(pnTemp+(pDoc->m_nOriHeight-i-1)*pDoc->m_nOriWidth+j);
			}
		}
//		memcpy( pDoc->pnOriPic,pnTemp , sizeof(int)*nSizePic );
	}
	else if( pDoc->m_nOriBitCount==24 )
	{
		pnTemp= new int [(long)pDoc->m_nOriHeight*(long)pDoc->m_nOriWidth*3];
		memcpy( pnTemp,pDoc->pnOriPic , sizeof(int)*nSizePic*3 );

		for(i=0;i<pDoc->m_nOriHeight;i++)
		{
			for(j=0;j<pDoc->m_nOriWidth;j++)
			{
				for(int p=0;p<3;p++)
				{
					for(j=0;j<pDoc->m_nOriWidth;j++)
					{
						*(pDoc->pnOriPic+i*pDoc->m_nOriWidth*3+j*3+p)=*(pnTemp+(pDoc->m_nOriHeight-i-1)*pDoc->m_nOriWidth*3+j*3+p);
					}
				}
			}
		}
//		memcpy( pDoc->pnOriPic,pnTemp , sizeof(int)*nSizePic );
	}
	int *pn;
	BYTE *pb;
	int l;
		
	pb=pDoc->pbOriStatic;
	pn=pDoc->pnOriPic;

	if(pDoc->m_nOriBitCount==24)
	{
		for(j=0;j<pDoc->m_nOriHeight;j++){
			for(i=0;i<pDoc->m_nOriWidth ;i++){
				for(l=0;l<3;l++){
					*pDoc->pbOriStatic=(BYTE)*pDoc->pnOriPic;
					pDoc->pnOriPic=pDoc->pnOriPic+1;
					pDoc->pbOriStatic=pDoc->pbOriStatic+1;						
				}						//for l
			}							//for i
			if(((pDoc->m_nOriWidth*3)%4)!=0){		//加入附加字节
				pDoc->pbOriStatic=pDoc->pbOriStatic+4-((pDoc->m_nOriWidth*3)%4);
			}
		}
	}else if(pDoc->m_nOriBitCount==8)
	{
		for(j=0;j<pDoc->m_nOriHeight;j++){
			for(i=0;i<pDoc->m_nOriWidth ;i++){
				*pDoc->pbOriStatic=(BYTE)*pDoc->pnOriPic;
				pDoc->pnOriPic=pDoc->pnOriPic+1;
				pDoc->pbOriStatic=pDoc->pbOriStatic+1;						
			
			}							//for i
			if(((pDoc->m_nOriWidth)%4)!=0){		//加入附加字节
				pDoc->pbOriStatic=pDoc->pbOriStatic+4-((pDoc->m_nOriWidth)%4);
			}
		}
	}
	pDoc->pbOriStatic=pb;
	pDoc->pnOriPic=pn;
	Invalidate();
	free(pnTemp);
	
}

void CImageVisualView::OnGeoRotation() 
{
	// TODO: Add your command handler code here
	
	CImageVisualDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	pDoc->m_boolFlag=FALSE;

	int i,j,x;	
	CFile fOutFile;
	int *pnTemp,*pnT;

	int nSizePic;

	int nNewWidth,nNewHeight;
	int *pn3T;

	BITMAPFILEHEADER BF;
	BITMAPINFOHEADER BI;
	BYTE *lpTemp;				//写入图像数据指针
	BYTE *lpo;

	nNewWidth=pDoc->m_nOriHeight;
	nNewHeight=pDoc->m_nOriWidth;

	nSizePic=pDoc->m_nOriHeight*pDoc->m_nOriWidth;
		
	pnTemp= new int [(long)pDoc->m_nOriHeight*(long)pDoc->m_nOriWidth];
	pnT=new int [(long)pDoc->m_nOriHeight*(long)pDoc->m_nOriWidth];

	if( pDoc->m_nOriBitCount== 8 )
	{
		memcpy( pnTemp,pDoc->pnOriPic , sizeof(int)*nSizePic );
		pn3T=new int[(long)pDoc->m_nOriHeight*(long)pDoc->m_nOriWidth*3];
	
		for(i=0;i<nNewHeight;i++)
		{
			for(j=0;j<nNewWidth;j++)
			{
				*(pnT+i*nNewWidth+j)=*(pnTemp+(nNewWidth-1-j)*nNewHeight+i);
			}
		}

⌨️ 快捷键说明

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