资源简介
http://hi.baidu.com/aijianmeng/blog/item/15de9200d52ec9191d9583eb.html
代码片段和文件信息
#include “InfoHidden.h“
int main(int argc char **argv)
{
BITMAPFILEHEADER bmpFileHeader;
BITMAPINFOHEADER bmpInfoHeader;
size_t nInfoSize = 0;
BYTE binaryInifo[256] = {‘\0‘};
FILE *fp = NULL;
Block block;
if (argc != 3)
{
printf(“usage:%s bitmap info“ argv[0]);
return -1;
}
fp = fopen(argv[1] “rb+“);
if (NULL == fp)
{
printf(“%s\n“ strerror(errno));
return -1;
}
if (!readBMPFileHeader(fp &bmpFileHeader))
{
if (bmpFileHeader.bfType != 0X4D42)
{
printf(“不是bmp格式的位图\n“);
goto end;
}
}
if (!readBMPInfoHeader(fp &bmpInfoHeader))
{
if (bmpInfoHeader.biBitCount < 24)
{
printf(“需要24位色或以上的位图\n“);
goto end;
}
if ((bmpInfoHeader.biSize/12) < (nInfoSize/3))
{
printf(“位图不能存放当前的信息。能存放的最大信息量是:%d\n“ bmpInfoHeader.biSize/4);
goto end;
}
}
/*隐藏数据*/
if (hiddenInfo(fp argv[2]))
{
goto end;
}
printf(“信息隐藏成功!\n“);
/*测试获取隐藏的数据*/
fclose(fp);
fp = fopen(argv[1] “rb“);
if (NULL == fp)
{
printf(“%s\n“ strerror(errno));
return -1;
}
if (!readBMPFileHeader(fp &bmpFileHeader))
{
if (bmpFileHeader.bfType != 0X4D42)
{
printf(“不是bmp格式的位图\n“);
goto end;
}
}
if (!readBMPInfoHeader(fp &bmpInfoHeader))
{
if (bmpInfoHeader.biBitCount < 24)
{
printf(“需要24位色或以上的位图\n“);
goto end;
}
if ((bmpInfoHeader.biSize/12) < (nInfoSize/3))
{
printf(“位图不能存放当前的信息。能存放的最大信息量是:%d\n“ bmpInfoHeader.biSize/4);
goto end;
}
}
/*解析数据*/
analysisInfo(fp binaryInifo);
printf(“解析出来的数据是:%s\n“ binaryInifo);
end:
fclose(fp);
fp = NULL;
return 0;
}
/*****************************************************************
*函数功能:读取bmp文件头
*传入参数:fp bmp文件句柄
*传出参数:bmpFileHeader 文件头指针
*返 回 值:成功返回0,否则-1
*****************************************************************/
int readBMPFileHeader( FILE *fp BITMAPFILEHEADER *bmpFileHeader )
{
size_t nBlock;
if (NULL == fp)
{
printf(“指针不能为NULL\n“);
return -1;
}
nBlock = fread(bmpFileHeader sizeof(BITMAPFILEHEADER) 1 fp);
if (nBlock != 1)
{
printf(“读取数据失败:%s“ strerror(errno));
return -1;
}
return 0;
}
/*****************************************************************
*函数功能:读取bmp信息头
*传入参数:fp bmp文件句柄
*传出参数:bmpInfoHeader 信息头指针
*返 回 值:成功返回0,否则-1
*****************************************************************/
int readBMPInfoHeader( FILE *fp BITMAPINFOHEADER *bmpInfoHeader )
{
size_t nBlock;
if (NULL == fp)
{
printf(“指
- 上一篇:html js 录音 保存 试听
- 下一篇:图书系统HTML模版
评论
共有 条评论