博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
生成一个空白BMP的简单代码【转】
阅读量:6293 次
发布时间:2019-06-22

本文共 1283 字,大约阅读时间需要 4 分钟。

转自:

做图像处理时,有时需要临时生成图使用。以下是生成320x240 24位图的一个简单的代码实现:#define WIDTHBYTES(bits) ((DWORD)(((bits)+31) & (~31)) / 8) void makebmp(){int nSize =abs(long(240 * WIDTHBYTES(24 * 320)));char*  buff = new char[nSize];memset(buff, 0, nSize);BITMAPINFOHEADER header;header.biSize = sizeof(BITMAPINFOHEADER);header.biWidth = 320;header.biHeight = 240*(-1);header.biBitCount = 24;header.biCompression = 0;header.biSizeImage = 0;header.biClrImportant = 0;header.biClrUsed = 0;header.biXPelsPerMeter = 0;header.biYPelsPerMeter = 0;header.biPlanes = 1;//3 构造文件BITMAPFILEHEADER bmpFileHeader;HANDLE hFile = NULL;DWORD dwTotalWriten = 0;DWORD dwWriten;bmpFileHeader.bfType = 0x4d42; //'BM';bmpFileHeader.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);bmpFileHeader.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)+ nSize;FILE* pf = fopen("d:\\test.bmp", "wb");fwrite(&bmpFileHeader, sizeof(BITMAPFILEHEADER), 1, pf);fwrite(&header, sizeof(BITMAPINFOHEADER), 1, pf);fwrite(buff, 1, nSize, pf);fclose(pf);delete buff;}唯一需要解释的就是这句:#define WIDTHBYTES(bits) ((DWORD)(((bits)+31) & (~31)) / 8)这是为了保证32字节对齐。VC的头文件和DirectShow的文件都能找到定义。因为 memset(buff, 0, nSize);所以生成的图是黑色的。可以自己修改,按RGB三字节写上不同的值,看看图像有什么变化。

 

本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sky-heaven/p/6926186.html,如需转载请自行联系原作者

你可能感兴趣的文章
微信聊天和朋友圈可以拍摄和分享大视频?
查看>>
ubuntu-15.10-server-i386.iso 安装 Oracle 11gR2 数据库
查看>>
three.js贴图
查看>>
C++ ODB 框架(未实践使用)
查看>>
DBSCAN(Density-based spatial clustering of applications with noise)
查看>>
HTTP 2.0与HTTP 1.1区别
查看>>
项目中使用oracle序列
查看>>
HBase编程 API入门系列之put(客户端而言)(1)
查看>>
Oracle Form's Trigger Tutorial With Sample FMB
查看>>
Nuget很慢,我们该怎么办
查看>>
easyui filter 过滤时间段
查看>>
2017-01-03
查看>>
C++获取当前目录
查看>>
Genymotion 解决虚拟镜像下载速度特别慢的问题
查看>>
Oracle数据库的语句级读一致性
查看>>
Cannot run Eclipse; JVM terminated. Exit code=13
查看>>
sort与sorted
查看>>
linux下安装和卸载vmware产品
查看>>
Linux系统(一)文件系统、压缩、打包操作总结
查看>>
微信小程序把玩(四十)animation API
查看>>