bmp图生成

init

int width = 256;
int height = 256;
std::uint16_t count = 8;

_bmpHead.fileInfo.type[0] = 'B';
_bmpHead.fileInfo.type[1] = 'M';
_bmpHead.fileInfo.reserved1 = 0;
_bmpHead.fileInfo.reserved2 = 0;
_bmpHead.fileInfo.size = sizeof(_bmpHead) + sizeimage;
_bmpHead.fileInfo.offset = sizeof(_bmpHead);

_bmpHead.bitMapInfo.size = 40;
_bmpHead.bitMapInfo.width = width;
_bmpHead.bitMapInfo.height = height;
_bmpHead.bitMapInfo.planes = 1;
_bmpHead.bitMapInfo.count = count;
_bmpHead.bitMapInfo.compression = 0;
_bmpHead.bitMapInfo.sizeimage = sizeimage;
_bmpHead.bitMapInfo.xmeter = 0;
_bmpHead.bitMapInfo.ymeter = 0;
_bmpHead.bitMapInfo.cused = 0;
_bmpHead.bitMapInfo.cimportant = 0;

save

/*
 *      bmp文件头(bmp file header):共14字节;
 *      位图信息头(bitmap information):共40字节;
 *      调色板(color palette):可选;
 *      位图数据;
 */


// 填充计算
int bytesPerLine = ((_bmpHead.bitMapInfo.width * _bmpHead.bitMapInfo.count + 31) >> 5) << 2;

// 重新计算位图的大小
_bmpHead.bitMapInfo.sizeimage = bytesPerLine * _bmpHead.bitMapInfo.height * _bmpHead.bitMapInfo.count / 8;
// 重新计算文件大小
_bmpHead.fileInfo.size = _bmpHead.bitMapInfo.sizeimage + sizeof(BmpHead);

const int colorPalette = 1024;                                               // 调色板大小
if (_bmpHead.bitMapInfo.count == 8) // 灰度图
{
    _bmpHead.fileInfo.size += colorPalette;
    _bmpHead.fileInfo.offset = sizeof(BmpHead) + colorPalette;
}
posted @   thomas_blog  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~
点击右上角即可分享
微信分享提示