📄 watermarkxview.cpp
字号:
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 + -