Bmp读取&&保存&&旋转&&加密&&加密后信息提取(LSB算法)

这段代码展示了如何使用C++处理BMP图像,包括读取BMP文件、隐藏信息(LSB算法)、旋转图像以及从加密图像中提取隐藏信息。代码实现了文件的读写操作,以及位图数据的处理和信息隐藏。
摘要由CSDN通过智能技术生成
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include <Windows.h>
#include<stdio.h>
using namespace std;
char buf[51200000];
typedef struct tagIMAGEDATA
{
    BYTE blue;
    BYTE green;
    BYTE red;
}IMAGEDATA;
BITMAPFILEHEADER strHead;
BITMAPINFOHEADER strInfo;


char* DEbuffer;
IMAGEDATA *imagedata;
IMAGEDATA *imagedataRot=NULL;
BITMAPFILEHEADER filehead;
BITMAPINFOHEADER  infohead;
RGBQUAD strPla[256];
RGBQUAD *bmprgbquad;
int width;
int height;
FILE *fp;
FILE *fw;
char* buffer=(char*)malloc(100*sizeof(char));
BYTE* data=NULL;
int calSizeOfString()
{
    int cnt=0;
    for(int i=0;true;i++)
    {
        if(*(buffer+i)=='\0')
        {
            cnt=i;
            break;
        }
    }
    return cnt;
}
bool HideInformation(int length)
{
    cout<<sizeof(*data)<<endl;
    unsigned int OpAND[8]={128,64,32,16,8,4,2,1};
    char tempBuffer;
    if(length==0)
        return false;
    while(length>0)
    {
        cout<<"cnt"<<endl;
        for(int i=0;i<8;i++)
        {
          if(((tempBuffer=(*buffer))&OpAND[i])==0)//判断最高byte是0还是1
          {
            if((*data)%2!=0)//判断作为隐藏载体的字节最低位是不是和要被隐藏的最高byte一样是0或者1
                *data=(*data)-1;
          }
          else
          {
            if((*data)%2!=1)
                *data=(*data)+1;
          }
          data++;
        }
          buffer++;
          length--;
    }
    return true;
}
void hide(char fileName[90]){
    fp=fopen(fileName,"rb+");
    fread(&filehead,sizeof(BITMAPFILEHEADER),1,fp);
    fread(&infohead,sizeof(BITMAPINFOHEADER),1,fp);
        for(int i=0;i<infohead.biClrUsed;i++)
    {
        fread(&strPla[i],sizeof(strPla[i]),1,fp);
    }
    width=infohead.biWidth;
    height=infohead.biHeight;
    width=(width*sizeof(IMAGEDATA)+3)/4*4;
    imagedata=(IMAGEDATA*)malloc(sizeof(IMAGEDATA)*width*height);
    fread(im
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值