资源简介
基于LSB的BMP文件信息隐藏,C++实现。
Win32控制台应用程序。
代码片段和文件信息
/*********************************************
* 功能:基于LSB的BMP文件信息隐藏
* 作者:aikesiluoente
* 构建日期: 2010/6/10
* 本程序参考自:“foxtail-处理bmp图象-2008/3/4”
在此表示感谢
*********************************************/
#include “Bmp24.h“
#include
#include
#include
Bmp24::Bmp24(void)
{
_pbmfh = new tagBITMAPFILEHEADER;
_pbmih = new tagBITMAPINFOHEADER;
_pbmd = NULL;
_size = 0;
}
Bmp24::~Bmp24(void)
{
delete _pbmfh;
delete _pbmih;
if (_pbmd)
{
delete _pbmd;
}
}
//载入BMP文件
void Bmp24::LoadFile(const char *filename)
{
ifstream InFile;
InFile.open(filename ios::in | ios::binary);
InFile.read((char*)_pbmfh sizeof(tagBITMAPFILEHEADER));
cout << “+-----------+“ << endl
<< “Read bmfh OK!“ << endl;
InFile.read((char*)_pbmih sizeof(tagBITMAPINFOHEADER));
cout << “Read bmih OK!“ << endl;
//直接定位BMP数据区,跳过调色板
_size = _pbmfh->bfSize - _pbmfh->bfOffBits;
_pbmd = new BYTE[_size];
InFile.read((char*)_pbmd _size);
cout << “Read bmd OK!“ << endl;
InFile.close();
cout << “Load file OK!“ << endl
<< “+-----------+“ << endl;
}
//保存BMP文件
void Bmp24::SaveFile(const char *filename)
{
ofstream OutFile;
OutFile.open(filename ios::out | ios::binary);
OutFile.write((char*)_pbmfh sizeof(tagBITMAPFILEHEADER));
cout << “+============+“ << endl
<< “Write bmfh OK!“ << endl;
OutFile.write((char*)_pbmih sizeof(tagBITMAPINFOHEADER));
cout << “Write bmih OK!“ << endl;
OutFile.write((char*)_pbmd _size);
cout << “Write bmd OK!“ << endl;
OutFile.close();
cout << “Save file OK!“ << endl
<< “+============+“ << endl;
}
//嵌入文本文件
void Bmp24::embedTxt(const char *filename)
{
ifstream TxtFile;
TxtFile.open(filename ios::in | ios::binary);
TxtFile.seekg(0 TxtFile.end);
DWORD TxtFileLength = TxtFile.tellg();
if (_size < TxtFileLength * 8)
{
return ;
}
cout << “M file length: “ << TxtFileLength << endl;
BYTE *pTxtFile = new BYTE[TxtFileLength];
TxtFile.seekg(0 TxtFile.beg);
TxtFile.read((char*)pTxtFile TxtFileLength);
TxtFile.close();
for (int i = 0 k = 0; i < TxtFileLength; ++i)
{
for (int j = 0; j < 8; ++j)
{
if ((pTxtFile[i] >> j & 0x01) == 0)
_pbmd[k+32] &= 0xfe;
else
_pbmd[k+32] |= 0x01;
++k;
}
}
for (int i = 0; i < 32; ++i)
{
if ((TxtFileLength >> i & 0x00000001) == 0)
_pbmd[i] &= 0xfe;
else
_pbmd[i] |= 0x01;
}
delete pTxtFile;
cout << “embedding file OK!“ << endl;
}
//提取文本文件
void Bmp24::ExtractTxt(const char *filename)
{
DWORD TxtFileLength = 0x00000000;
for (int i = 0; i < 32; ++i)
{
if ((_pbmd[i] & 0x01) == 0)
TxtFileLength &= 0x7fffffff;
else
TxtFileLength |= 0x80000000;
if (i < 31)
TxtFileLength >>= 1;
}
cout << “M‘ file length: “ << TxtFileLength << endl;
BYTE *pTxtFile = new BYTE[TxtFileLength];
for (int i = 0 k = 0; i < TxtFileLength * 8; ++i)
{
if (i && i % 8 == 0)
++k;
if ((_pbm
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3403 2010-06-13 15:07 Bmp24.cpp
文件 1281 2010-06-13 15:07 Bmp24.h
文件 1163 2010-06-13 15:07 Test.cpp
----------- --------- ---------- ----- ----
5847 3
- 上一篇:vs 2013基于IE浏览器的源代码
- 下一篇:平行束卷积反投影算法C语言实现
相关资源
- C语言jpg转换成bmp格式代码
- 基于MFC的BMP图像处理
- 图像处理-读取bmp图像均值滤波-C++
- c++读写BMP JPG 和png 的图像文件linux
- c语言 bmp图片显示
- bmp图片灰度化二值化
- raw格式转换为bmp格式包括代码,lena
- 读bmp图像像素存txt并输出bmp图像
- VC6.0打开BMP位图程序白色彩色皆可
- 24位RGB数据保存为BMP图片
- bmp280的读取C语言
- vs2010 MFC tabctrl控件重载, 实现标签加
- C语言读取BMP文件
- bmp 图片转YUV420数组
- bmp格式图片转换为raw格式
- RAW格式图像转换为BMP格式
- jpg jpeg 解码 转 bmp RGB vs2013 c++
- C编写的读取BMP文件的程序
- C/C++语言图像处理:各种滤波
- c++ bmp位图修改读取头文件
- MFC数字图像处理BMP格式读取 保存 DF
- C中如何显示bmp文件,教你C语言编程的
- VC++图片控件(Picture Control)显示资源
- C++实战源码-将AVI动画分解成BMP位图
- C++实战源码-浏览大幅BMP图片
- bmp、jpg、gif图片隐写
- C++实战源码-将BMP位图组合成AVI动画
- c++ 连续的bmp图片转avi
- BMP图像处理程序,包括轮廓识别,图
- 一个用MFC制作的把DICOM图像转换成BM
评论
共有 条评论