#include <string>
#include <vector>
#include <fstream>
using namespace std;
class CBitmap
{
public:
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
typedef long LONG;
typedef struct{
DWORD bfSize; // file size
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits; // offset from file header to pixel data
}BITMAPFILEHEADER;
typedef struct{
DWORD biSize; // structure size
LONG biWidth;
LONG biHeight;
WORD biPlanes; // must be 1
WORD biBitCount; // bit number of one pixel
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
}BITMAPINFOHEADER;
CBitmap(){}
~CBitmap(){}
bool load(const string& file)
{
ifstream fs(file, ios_base::in | ios_base::beg | ios_base::binary);
if (!fs.is_open()){
return false;
}
fs.read((char*)&m_tag, sizeof(WORD));
if (m_tag != 0x4D42){
return false;
}
fs.read((char*)&m_fileHeader, sizeof(m_fileHeader));
if (fs.gcount() != sizeof(m_fileHeader)){
return false;
}
fs.read((char*)&m_infoHeader, sizeof(m_infoHeader));
if (fs.gcount() != sizeof(m_infoHeader)){
return false;
}
m_palette.resize(m_fileHeader.bfOffBits - sizeof(m_tag)-sizeof(m_fileHeader)-sizeof(m_infoHeader));
fs.read((char*)&m_palette[0], m_palette.size());
m_data.resize(m_fileHeader.bfSize - m_fileHeader.bfOffBits);
fs.read((char*)&m_data[0], m_data.size());
if (fs.gcount() != m_data.size()){
return false;
}
fs.close();
return true;
}
bool save(const string& file)
{
ofstream fs(file, ios_base::binary);
if (!fs.is_open()){
return false;
}
fs.write((char*)&m_tag, sizeof(WORD));
fs.write((char*)&m_fileHeader, sizeof(m_fileHeader));
fs.write((char*)&m_infoHeader, sizeof(m_infoHeader));
fs.write((char*)&m_palette[0], m_palette.size());
fs.write((char*)&m_data[0], m_data.size());
fs.close();
return true;
}
WORD m_tag;
BITMAPFILEHEADER m_fileHeader;
BITMAPINFOHEADER m_infoHeader;
vector<BYTE> m_palette;
vector<BYTE> m_data;
};
原文链接: https://www.cnblogs.com/zhuyingchun/p/5952457.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/242348
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!