资源简介
数字水印的算法c++实现,包括水印嵌入和水印提取
代码片段和文件信息
// DIB.cpp
#include “stdafx.h“
#include “DIB.h“
CDib::CDib()
{
m_pDib = NULL;
m_pWordData = NULL;
m_pFile = NULL;
m_pOldDibShow = NULL;
}
CDib::~CDib()
{
if( m_pDib != NULL )
delete [] m_pDib;
if( m_pWordData != NULL )
delete [] m_pWordData;
if (m_pFile != NULL)
delete [] m_pFile;
if (m_pOldDibShow != NULL)
delete [] m_pOldDibShow;
}
BOOL CDib::Load( const char *pszFilename )
{
CFile cf;
if( !cf.Open( pszFilename CFile::modeRead ) )
return( FALSE );
DWORD dwDibSize;
dwDibSize =
cf.GetLength() - sizeof( BITMAPFILEHEADER );
unsigned char *pDib;
pDib = new unsigned char [dwDibSize];
if( pDib == NULL )
return( FALSE );
BITMAPFILEHEADER BFH;
try{
if( cf.Read( &BFH sizeof( BITMAPFILEHEADER ) )
!= sizeof( BITMAPFILEHEADER ) ||
BFH.bfType != ‘MB‘ ||
cf.Read( pDib dwDibSize ) != dwDibSize ){
delete [] pDib;
return( FALSE );
}
}
catch( CFileException *e ){
e->Delete();
delete [] pDib;
return( FALSE );
}
cf.Close();
if( m_pDib != NULL )
delete m_pDib;
if (BFH.bfReserved1 != 0) //含有隐藏信息,保存其大小
{
if (BFH.bfReserved2 == 0)
embfile_size = BFH.bfReserved1;
else
embfile_size = BFH.bfReserved1 + 65535;
}
m_pDib = pDib;
m_dwDibSize = dwDibSize;
m_pBIH = (BITMAPINFOHEADER *) m_pDib;
m_pPalette =
(RGBQUAD *) &m_pDib[sizeof(BITMAPINFOHEADER)];
m_nPaletteEntries = 1 << m_pBIH->biBitCount;
if( m_pBIH->biBitCount > 8 )
m_nPaletteEntries = 0;
else if( m_pBIH->biClrUsed != 0 )
m_nPaletteEntries = m_pBIH->biClrUsed;
m_pDibBits =
&m_pDib[sizeof(BITMAPINFOHEADER)+
m_nPaletteEntries*sizeof(RGBQUAD)];
if( m_Palette.GetSafeHandle() != NULL )
m_Palette.Deleteobject();
if( m_nPaletteEntries != 0 ){
LOGPALETTE *pLogPal = (LOGPALETTE *) new char
[sizeof(LOGPALETTE)+
m_nPaletteEntries*sizeof(PALETTEENTRY)];
if( pLogPal != NULL ){
pLogPal->palVersion = 0x300;
pLogPal->palNumEntries = m_nPaletteEntries;
for( int i=0; i pLogPal->palPalEntry[i].peRed =
m_pPalette[i].rgbRed;
pLogPal->palPalEntry[i].peGreen =
m_pPalette[i].rgbGreen;
pLogPal->palPalEntry[i].peBlue =
m_pPalette[i].rgbBlue;
}
m_Palette.CreatePalette( pLogPal );
delete [] pLogPal;
}
}
m_BitCount = 24; //24位位图
p = m_pDibBits; //指向位图数据的指针,用来执行处理操作用
bitmap_size = m_dwDibSize - (m_pDibBits - m_pDib);//真正的位图数据的大小(即除头结构外)
tag = BFH.bfReserved1;
return( TRUE );
}
BOOL CDib::Save( const char *pszFilename ) //保存含有隐藏信息的bmp
{
if( m_pDib == NULL )
return( FALSE );
CFile cf;
if( !cf.Open( pszFilename
CFile::modeCreate | CFile::modeWrite ) )
return( FALSE );
try{
BITMAPFILEHEADER BFH;
memset( &BFH 0 sizeof( BITMAPFILEHEADER ) );
BFH.
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 8128 2004-06-05 00:00 数字水印实现算法\MyImageWork\DIB.cpp
文件 1028 2004-06-05 00:00 数字水印实现算法\MyImageWork\DIB.h
文件 2553 2004-06-04 00:00 数字水印实现算法\MyImageWork\MainFrm.cpp
文件 1598 1998-01-01 00:00 数字水印实现算法\MyImageWork\MainFrm.h
文件 26028 2011-06-27 11:13 数字水印实现算法\MyImageWork\MyImageWork.aps
文件 4334 2004-06-05 00:00 数字水印实现算法\MyImageWork\MyImageWork.cpp
文件 4843 2004-06-05 00:00 数字水印实现算法\MyImageWork\MyImageWork.dsp
文件 547 2003-05-08 00:00 数字水印实现算法\MyImageWork\MyImageWork.dsw
文件 1411 2003-05-08 00:00 数字水印实现算法\MyImageWork\MyImageWork.h
文件 10325 2004-06-05 00:00 数字水印实现算法\MyImageWork\MyImageWork.rc
文件 1842 2003-05-08 00:00 数字水印实现算法\MyImageWork\MyImageWorkDoc.cpp
文件 1530 2003-05-08 00:00 数字水印实现算法\MyImageWork\MyImageWorkDoc.h
文件 6607 2004-06-05 00:00 数字水印实现算法\MyImageWork\MyImageWorkView.cpp
文件 2224 2004-06-05 00:00 数字水印实现算法\MyImageWork\MyImageWorkView.h
文件 4521 2010-06-20 00:00 数字水印实现算法\MyImageWork\ReadMe.txt
文件 403 2003-05-08 00:00 数字水印实现算法\MyImageWork\res\MyImageWork.rc2
文件 1078 2003-05-08 00:00 数字水印实现算法\MyImageWork\res\MyImageWorkDoc.ico
文件 1078 2004-06-05 00:00 数字水印实现算法\MyImageWork\res\SECUR02A.ICO
文件 694 2009-11-16 00:00 数字水印实现算法\MyImageWork\res\使 用 说 明.txt
文件 1339 2004-06-05 00:00 数字水印实现算法\MyImageWork\resource.h
文件 213 2003-05-08 00:00 数字水印实现算法\MyImageWork\StdAfx.cpp
文件 1054 2003-05-08 00:00 数字水印实现算法\MyImageWork\StdAfx.h
目录 0 2011-09-21 16:34 数字水印实现算法\MyImageWork\res
目录 0 2011-09-21 16:34 数字水印实现算法\MyImageWork
目录 0 2011-09-21 16:34 数字水印实现算法
----------- --------- ---------- ----- ----
83378 25
- 上一篇:实验二 递归子程序方法
- 下一篇:bsdiff vc工程
相关资源
- 用C#和C++实现的进程调度算法程序操作
- 约瑟夫环问题 循环队列实现C++源码
- 随机网络拓扑生成算法c++实现waxman算
- C++ Primer中文版第五版带目录及源码
- 回溯法 0-1背包问题 C++
- c++api中文版
- c++实现的端口映射
- QR分解算法的纯c++代码
- 基于c++的udp传输,传送超过10M的文件
- MFC程序设计-画图板
- 操作系统实验--电梯调度 VC++实现
- C++实现排课程序
- VS2010 C++ ADO读取ACCESS 数据库
- 东北大学c++实验报告214492
- JMAIL邮件发送C++
- 网络流量统计源程序c++
- C++实现的单纯形算法计算程序
- AES加密算法(C++实现)
- 基于C++的火车票管理系统
- 员工管理系统c++
- 数字高程模型DEM内插程序c,c++混合版
- c/c++实现的基于文件的RSA加解密
- c/c++实现的基于文件的DES加解密
- FTDI2232H上位机程序
- C++ 五子棋 小游戏
- 求陪集分解
- vc++6.0实现的学生成绩管理系统代码
- C++ 画图 茶壶
- GIS拓扑关系生成程序
- 摆渡木马Visual C++ 源码
评论
共有 条评论