資源簡介
程序本身通過文本中的文字將對24位圖進(jìn)行信息嵌入隱藏其中,然后能通過程序?qū)⑶度肫渲械男畔⑻岢觯4嬖诹硪粋€(gè)文本當(dāng)中。
代碼片段和文件信息
#include?
#include?
#include?
#include?
#pragma?once
#pragma?pack(1)
using?namespace?std;
typedef?unsigned?short?WORD;
typedef?unsigned?long?DWORD;
typedef?unsigned?char?BYTE;
//BMP文件頭
typedef?struct?tagBITMAPFILEHEADER
{
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
};
//BMP文件信息頭
typedef?struct?tagBITMAPINFOHEADER
{
DWORD biSize;
DWORD biWidth;
DWORD biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
DWORD biXPelsPerMeter;
DWORD biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
};
class?Bmp24
{
public:
Bmp24(void);
~Bmp24(void);
void?LoadFile(const?char?*filename);
void?SaveFile(const?char?*filename);
void?embedTxt(const?char?*filename);
void?ExtractTxt(const?char?*filename);
private:
tagBITMAPFILEHEADER *_pbmfh; //指向BMP文件頭
tagBITMAPINFOHEADER *_pbmih; //指向BMP文件信息頭
BYTE *_pbmd; //指向BMP數(shù)據(jù)區(qū)
DWORD _size; //BMP數(shù)據(jù)區(qū)大小(以字節(jié)為單位)
};
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));
InFile.read((char*)_pbmih?sizeof(tagBITMAPINFOHEADER));
//直接定位BMP數(shù)據(jù)區(qū),跳過調(diào)色板
_size?=?_pbmfh->bfSize?-?_pbmfh->bfOffBits;
_pbmd?=?new?BYTE[_size];
InFile.read((char*)_pbmd?_size);
InFile.close();
cout?<“讀取文件成功!“?<}
//保存BMP文件
void?Bmp24::SaveFile(const?char?*filename)
{
ofstream?OutFile;
OutFile.open(filename?ios::out?|?ios::binary);
OutFile.write((char*)_pbmfh?sizeof(tagBITMAPFILEHEADER));
OutFile.write((char*)_pbmih?sizeof(tagBITMAPINFOHEADER));
OutFile.write((char*)_pbmd?_size);
OutFile.close();
cout?<“保存文件成功!“?<}
//嵌入文本文件
void?Bmp24::embedTxt(const?char?*filename)
{
int?ik;
ifstream?TxtFile;
TxtFile.open(filename?ios::in?|?ios::binary);
TxtFile.seekg(0?TxtFile.end);
DWORD?TxtFileLength?=?TxtFile.tellg();
if?(_size? {
評論
共有 條評論