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

📄 watermarkxview.cpp

📁 一篇有关数字水印的程序
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		m_rectTiquSuiyin.left  = winPlacement->rcNormalPosition.left + 128 - nImageWidth/2;
	}

	//调整对话框的大小
	//this->GetWindowPlacement(winPlacement);
	//winPlacement->rcNormalPosition.top = nIniImgtop -50;
	//winPlacement->rcNormalPosition.bottom = nIniImgBottom + 350;
	//winPlacement->rcNormalPosition.left   = nIniImgLeft   - 20;
	//winPlacement->rcNormalPosition.right  = nIniImgRight  + 60;
	//this->SetWindowPlacement(winPlacement);

	// 释放已分配内存
	delete winPlacement;

	// 设置计算图象控件位置标志位为TRUE
	//m_bCalImgLoc = TRUE;


	

}

void CWaterMarkxView::OnInitData()
{
	// 判断调色板是否为空
	if (m_OriginpalDIB != NULL)
	{
		// 删除调色板对象
		delete m_OriginpalDIB;
		// 重置调色板为空
		m_OriginpalDIB = NULL;
	}
	if (m_SuiyinpalDIB != NULL)
	{
		// 删除调色板对象
		delete m_SuiyinpalDIB;
		// 重置调色板为空
		m_SuiyinpalDIB = NULL;
	}
	
	
	// 设置文档大小
	//m_sizeDoc = CSize((int) ::DIBWidth(lpDIB), (int) ::DIBHeight(lpDIB));
	
	//SetHDIBWidth(::DIBWidth(lpDIB));
	//SetHDIBHeight(::DIBHeight(lpDIB));
	//m_lWidth=::DIBWidth(lpDIB);
	//m_lHeight=::DIBHeight(lpDIB);
	// 创建新调色板

	m_OriginpalDIB = new CPalette;
	m_SuiyinpalDIB = new CPalette;
	// 判断是否创建成功
	if (m_OriginpalDIB == NULL)
	{
		// 失败,可能是内存不足
		::GlobalFree((HGLOBAL) m_OriginHDIB);
		
		// 设置DIB对象为空
		m_OriginHDIB = NULL;
		
		// 返回
		return;
	}
	if (m_SuiyinpalDIB == NULL)
	{
		// 失败,可能是内存不足
		::GlobalFree((HGLOBAL) m_SuiyinHDIB);
		
		// 设置DIB对象为空
		m_SuiyinHDIB = NULL;
		
		// 返回
		return;
	}
	
	// 调用CreateDIBPalette来创建调色板
	if (::CreateDIBPalette(m_OriginHDIB, m_OriginpalDIB) == NULL)
	{
		// 返回空,可能该DIB对象没有调色板
		
		// 删除
		//::GlobalFree((HGLOBAL) m_OriginHDIB);
		
		// 设置为空
		//m_OriginHDIB = NULL;
		
		// 返回
		return;
	}

	if (::CreateDIBPalette(m_SuiyinHDIB, m_SuiyinpalDIB) == NULL)
	{
		// 返回空,可能该DIB对象没有调色板
		
		// 删除
		//::GlobalFree((HGLOBAL) m_OriginHDIB);
		
		// 设置为空
		//m_OriginHDIB = NULL;
		
		// 返回
		return;
	}

}

void CWaterMarkxView::CopyHDIB(HDIB SourceHDIB,HDIB ObjectHDIB,long nCount)
{
	//int i,j;
	//m_pDoc->SetHDIB(m_OriginHDIB);
	//m_pDoc->OnFilterLee(3);
	LPSTR lpDIBSource;
	LPSTR lpDIBObject;
	/*unsigned char*	lpSrco;
	unsigned char*	lpSrcs;
	//LPSTR lpDetectDIB;
	//LPSTR lpDIB_temp;
	// 指向DIB象素指针
	LPSTR lpDIBBits_Source,lpDIBBits_Object;
	LONG lWidth;
	LONG lHeight;
	LONG lLineBytes;
	DWORD dwBitsSize;
	WORD wNumColors;
	///BITMAPFILEHEADER
	WORD bfType;
	DWORD bfSize;
	WORD bfReserved1;
	WORD bfReserved2;
	DWORD bfOffBits;
	///////////////////
	///BITMAPINFOHEADER
	DWORD biSize;
	LONG biWidth;
	LONG biHeight;
	WORD biPlanes;
	WORD biBitCount;
	DWORD biCompression;
	DWORD biSizeImage;
	LONG biXPelsPerMeter;
	LONG biYPelsPerMeter;
	DWORD biClrUsed;
	DWORD biClrImportant;
	LPBITMAPINFO lpbmi_Source,lpbmi_Object;*/
	//LPBITMAPINFO lpbmi_Filter,lpbmi_Detect;
	///////////////////////

	///////锁定DIB//////
	DWORD biSize;
	lpDIBSource = (LPSTR)::GlobalLock((HGLOBAL) SourceHDIB);
	lpDIBObject = (LPSTR) ::GlobalLock((HGLOBAL) ObjectHDIB);
	biSize=((LPBITMAPINFOHEADER)lpDIBSource)->biSize;

	memcpy(lpDIBObject,lpDIBSource,biSize+::PaletteSize(lpDIBSource)+nCount);
	/*lWidth=::DIBWidth(lpDIBSource);
	lHeight=::DIBHeight(lpDIBSource);
	// 计算图像每行的字节数
	lLineBytes = WIDTHBYTES(lWidth * 8);
	dwBitsSize = lLineBytes*lHeight;
	///////////////////////
	///////////////////////
	bfType=((LPBITMAPFILEHEADER)lpDIBSource)->bfType;
    bfSize=((LPBITMAPFILEHEADER)lpDIBSource)->bfSize;
	bfReserved1=((LPBITMAPFILEHEADER)lpDIBSource)->bfReserved1;
	bfReserved2=((LPBITMAPFILEHEADER)lpDIBSource)->bfReserved2;
	bfOffBits=((LPBITMAPFILEHEADER)lpDIBSource)->bfOffBits;
	///////////////////////
	biSize=((LPBITMAPINFOHEADER)lpDIBSource)->biSize;
	biWidth=((LPBITMAPINFOHEADER)lpDIBSource)->biWidth;
	biHeight=((LPBITMAPINFOHEADER)lpDIBSource)->biHeight;
	biPlanes=((LPBITMAPINFOHEADER)lpDIBSource)->biPlanes;
	biBitCount=((LPBITMAPINFOHEADER)lpDIBSource)->biBitCount;
	biCompression=((LPBITMAPINFOHEADER)lpDIBSource)->biCompression;
	biSizeImage=((LPBITMAPINFOHEADER)lpDIBSource)->biSizeImage;
	biXPelsPerMeter=((LPBITMAPINFOHEADER)lpDIBSource)->biXPelsPerMeter;
	biYPelsPerMeter=((LPBITMAPINFOHEADER)lpDIBSource)->biYPelsPerMeter;
	biClrUsed=((LPBITMAPINFOHEADER)lpDIBSource)->biClrUsed;
	biClrImportant=((LPBITMAPINFOHEADER)lpDIBSource)->biClrImportant;
	////////////////
	//lpFilterDIB = (LPSTR) ::GlobalLock((HGLOBAL) m_FilterHDIB);
	lpDIBObject = (LPSTR) ::GlobalLock((HGLOBAL) ObjectHDIB);

	lpbmi_Object = (LPBITMAPINFO)lpDIBObject;
	//lpbmi_Detect = (LPBITMAPINFO)lpDetectDIB;
	lpbmi_Source = (LPBITMAPINFO)lpDIBSource;
	wNumColors = ::DIBNumColors(lpDIBSource);
	for (i = 0; i < (int)wNumColors; i++)
		{
				lpbmi_Object->bmiColors[i].rgbRed=lpbmi_Source->bmiColors[i].rgbRed;
				//lpbmi_Detect->bmiColors[i].rgbRed=lpbmi->bmiColors[i].rgbRed;
				// 读取绿色分量
				lpbmi_Object->bmiColors[i].rgbGreen=lpbmi_Source->bmiColors[i].rgbGreen;
				//lpbmi_Detect->bmiColors[i].rgbGreen=lpbmi->bmiColors[i].rgbGreen;
				// 读取蓝色分量
				lpbmi_Object->bmiColors[i].rgbBlue=lpbmi_Source->bmiColors[i].rgbBlue;
				//lpbmi_Detect->bmiColors[i].rgbBlue=lpbmi->bmiColors[i].rgbBlue;
	}
	/////////////////////////
	((LPBITMAPFILEHEADER)lpDIBObject)->bfType;
	((LPBITMAPFILEHEADER)lpDIBObject)->bfSize=bfSize;
	((LPBITMAPFILEHEADER)lpDIBObject)->bfReserved1=bfReserved1;
	((LPBITMAPFILEHEADER)lpDIBObject)->bfReserved2=bfReserved2;
	((LPBITMAPFILEHEADER)lpDIBObject)->bfOffBits=bfOffBits;
		
	((LPBITMAPINFOHEADER)lpDIBObject)->biSize=biSize;
	((LPBITMAPINFOHEADER)lpDIBObject)->biWidth=biWidth;
	((LPBITMAPINFOHEADER)lpDIBObject)->biHeight=biHeight;
	((LPBITMAPINFOHEADER)lpDIBObject)->biPlanes=biPlanes;
	((LPBITMAPINFOHEADER)lpDIBObject)->biBitCount=biBitCount;
	((LPBITMAPINFOHEADER)lpDIBObject)->biCompression=biCompression;
	((LPBITMAPINFOHEADER)lpDIBObject)->biSizeImage=biSizeImage;
	((LPBITMAPINFOHEADER)lpDIBObject)->biXPelsPerMeter=biXPelsPerMeter;
	((LPBITMAPINFOHEADER)lpDIBObject)->biYPelsPerMeter=biYPelsPerMeter;
	((LPBITMAPINFOHEADER)lpDIBObject)->biClrUsed=biClrUsed;
	((LPBITMAPINFOHEADER)lpDIBObject)->biClrImportant=biClrImportant;
	*/
	/*lpDIBBits_Source = ::FindDIBBits(lpDIBSource);
	lpDIBBits_Object = ::FindDIBBits(lpDIBObject);
	//lpDIBBits_Detect = ::FindDIBBits(lpDetectDIB);
	for( i = 0; i < lWidth; i++)
		{
			for( j = 0; j < lHeight; j++)
			{
				lpSrco = (unsigned char*)lpDIBBits_Object + lLineBytes * (lHeight - 1 - j) + i;
				lpSrcs = (unsigned char*)lpDIBBits_Source + lLineBytes * (lHeight - 1 - j) + i;
				*(lpSrco)=*(lpSrcs);
			}
		}*/
	::GlobalUnlock((HGLOBAL) SourceHDIB);
	::GlobalUnlock((HGLOBAL) ObjectHDIB);

	return;

}

void CWaterMarkxView::OnFileSaveqianru() 
{
	// TODO: Add your command handler code here
	if(bsave_I)	
	{		   			
		OpenFileDlg(3);	   //保存嵌入水印后的图像 
		
		
		if(!Filename.IsEmpty())
		{	  
		/*Im_filename=mwArray(Filename);
		if(bsave_I)
		{
		subplot(mwArray(2),mwArray(2),mwArray(3)); 	
		C_imwrite(EI,mwArray(Filename),mwArray(Filetype));	 //保存嵌入水印后的图像
		title(mwArray("嵌入水印后的图像"));	
		
		  }
		  if(bsave_C)
		  {
		  subplot(mwArray(2),mwArray(2),mwArray(4)); 	
		  C_imwrite(EWI2,mwArray(Filename),mwArray(Filetype));	 //保存检测到的水印
		  title(mwArray("检测到的水印"));	
		  
		}  */
			// 设置窗口可见
			//SetVisible(h_a,mwArray("On"));
			
			// 进入窗口等待状态		 
			//mlfHGWaitForFiguresToDie(); 
			
			
			CFile file;
			CFileException fe;
			
			// 打开文件
			if (!file.Open(Filename, CFile::modeCreate |
				CFile::modeReadWrite | CFile::shareExclusive, &fe))
			{
				// 失败
				//ReportSaveLoadException(lpszPathName, &fe,
				//	TRUE, AFX_IDP_INVALID_FILENAME);
				
				// 返回FALSE
				return ;
			}
			
			// 尝试调用SaveDIB保存图像
			BOOL bSuccess = FALSE;
			TRY
			{
				
				// 更改光标形状
				BeginWaitCursor();
				
				// 尝试保存图像
				bSuccess = ::SaveDIB(m_QianruHDIB, file);
				
				// 关闭文件
				file.Close();
			}
			CATCH (CException, eSave)
			{
				// 失败
				file.Abort();
				
				// 恢复光标形状
				EndWaitCursor();
				//ReportSaveLoadException(lpszPathName, eSave,
				//	TRUE, AFX_IDP_FAILED_TO_SAVE_DOC);
				
				// 返回FALSE
				return ;
			}
			END_CATCH
				
			// 恢复光标形状
			EndWaitCursor();
			
			// 重置胀标记为FALSE
			//SetModifiedFlag(FALSE);
			
			if (!bSuccess)
			{
				// 保存失败,可能是其它格式的DIB,可以读取但是不能保存
				// 或者是SaveDIB函数有误
				
				CString strMsg;
				strMsg = "无法保存BMP图像!";
				
				// 提示出错
				::MessageBox(NULL, strMsg, "系统提示", MB_ICONINFORMATION | MB_OK);
			}
			
			
		}
	}
	
}

void CWaterMarkxView::OnUpdateFileSaveqianru(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	if( bsave_I )
		pCmdUI->Enable();
	else
		pCmdUI->Enable(FALSE);
	
}

void CWaterMarkxView::OnFileSaveshuiyin() 
{
	// TODO: Add your command handler code here
	if(bsave_C)	
	{		   			
		OpenFileDlg(4);	   //保存嵌入水印后的图像 
		
		
		if(!Filename.IsEmpty())
		{	  
		/*Im_filename=mwArray(Filename);
		if(bsave_I)
		{
		subplot(mwArray(2),mwArray(2),mwArray(3)); 	
		C_imwrite(EI,mwArray(Filename),mwArray(Filetype));	 //保存嵌入水印后的图像
		title(mwArray("嵌入水印后的图像"));	
		
		  }
		  if(bsave_C)
		  {
		  subplot(mwArray(2),mwArray(2),mwArray(4)); 	
		  C_imwrite(EWI2,mwArray(Filename),mwArray(Filetype));	 //保存检测到的水印
		  title(mwArray("检测到的水印"));	
		  
		}  */
			// 设置窗口可见
			//SetVisible(h_a,mwArray("On"));
			
			// 进入窗口等待状态		 
			//mlfHGWaitForFiguresToDie(); 
			
			
			CFile file;
			CFileException fe;
			
			// 打开文件
			if (!file.Open(Filename, CFile::modeCreate |
				CFile::modeReadWrite | CFile::shareExclusive, &fe))
			{
				// 失败
				//ReportSaveLoadException(lpszPathName, &fe,
				//	TRUE, AFX_IDP_INVALID_FILENAME);
				
				// 返回FALSE
				return ;
			}
			
			// 尝试调用SaveDIB保存图像
			BOOL bSuccess = FALSE;
			TRY
			{
				
				// 更改光标形状
				BeginWaitCursor();
				
				// 尝试保存图像
				bSuccess = ::SaveDIB(m_TiquHDIB, file);
				
				// 关闭文件
				file.Close();
			}
			CATCH (CException, eSave)
			{
				// 失败
				file.Abort();
				
				// 恢复光标形状
				EndWaitCursor();
				//ReportSaveLoadException(lpszPathName, eSave,
				//	TRUE, AFX_IDP_FAILED_TO_SAVE_DOC);
				
				// 返回FALSE
				return ;
			}
			END_CATCH
				
			// 恢复光标形状
			EndWaitCursor();
			
			// 重置胀标记为FALSE
			//SetModifiedFlag(FALSE);
			
			if (!bSuccess)
			{
				// 保存失败,可能是其它格式的DIB,可以读取但是不能保存
				// 或者是SaveDIB函数有误
				
				CString strMsg;
				strMsg = "无法保存BMP图像!";
				
				// 提示出错
				::MessageBox(NULL, strMsg, "系统提示", MB_ICONINFORMATION | MB_OK);
			}
			
			
		}
	}
	
}

void CWaterMarkxView::OnUpdateFileSaveshuiyin(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
		if( bsave_C )
		pCmdUI->Enable();
	else
		pCmdUI->Enable(FALSE);
	
}

void CWaterMarkxView::OnAssaultTest() 
{
	// TODO: Add your control notification handler code here
	
}

⌨️ 快捷键说明

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