保存 Bitmap
2015-07-28 22:34
253 查看
#include <Windows.h> void BuildInfoHeader(LONG lWidth, LONG lHeight, WORD wBitCount, BITMAPINFOHEADER &bitmapInfoHeader) { LONG lWidthStep = (((lWidth * wBitCount) + 31) & (~31)) / 8; bitmapInfoHeader.biSize = sizeof(BITMAPINFOHEADER); bitmapInfoHeader.biWidth = lWidth; bitmapInfoHeader.biHeight = lHeight; bitmapInfoHeader.biPlanes = 0; bitmapInfoHeader.biBitCount = wBitCount; bitmapInfoHeader.biCompression = BI_RGB; bitmapInfoHeader.biSizeImage = lWidthStep * lHeight; bitmapInfoHeader.biXPelsPerMeter= 0; bitmapInfoHeader.biYPelsPerMeter= 0; bitmapInfoHeader.biClrUsed = 0; bitmapInfoHeader.biClrImportant = 0; } void BuildFileHeader(LONG lWidth, LONG lHeight, WORD wBitCount, BITMAPFILEHEADER &bitmapFileHeader) { LONG lWidthStep = (((lWidth * wBitCount) + 31) & (~31)) / 8; bitmapFileHeader.bfType = ((WORD) ('M' << 8) | 'B'); //'BM' bitmapFileHeader.bfSize = (DWORD) sizeof(BITMAPFILEHEADER) + (DWORD) sizeof(BITMAPINFOHEADER) + lWidthStep * lHeight; bitmapFileHeader.bfReserved1 = 0; bitmapFileHeader.bfReserved2 = 0; bitmapFileHeader.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + (DWORD) sizeof(BITMAPINFOHEADER); } void SaveDIB2Bmp(int fileNum, const char *fileName, const char *filePath, LONG lWidth, LONG lHeight, WORD wBitCount, LPVOID pBuffer) { BITMAPINFOHEADER bitmapInfoHeader; BITMAPFILEHEADER bitmapFileHeader; BuildInfoHeader(lWidth, lHeight, wBitCount, bitmapInfoHeader); BuildFileHeader(lWidth, lHeight, wBitCount, bitmapFileHeader); char szFileName[MAX_PATH] = { 0 }; LONG lWidthStep = (((lWidth * wBitCount) + 31) & (~31)) / 8; LONG lDIBSize = lWidthStep * lHeight; sprintf(szFileName, "%s%d%s.bmp", filePath, fileNum, fileName); FILE *fp = fopen(szFileName, "wb"); fwrite(&bitmapFileHeader, sizeof(bitmapFileHeader), 1, fp); fwrite(&bitmapInfoHeader, sizeof(bitmapInfoHeader), 1, fp); fwrite(pBuffer, lDIBSize, 1, fp); fclose(fp); }
相关文章推荐
- 客户端网页编程--第二章(部分)、第三章
- 12. PHP 函数
- oracle 全文索引转
- emmet插件的使用方法(高速打代码)
- nginx 服务器重启命令,关闭
- Eclipse快捷键与使用技巧总结
- UE.getEditor is not a function
- UE.getEditor is not a function
- Java多线程基本知识小结
- Extjs 蒙板效果实现
- RESTful
- sonarQube自动化测试之sonar-runner进行测试
- java学习笔记(六) collections--stack
- pl/sql程序语言
- [FZYZOJ 1356] 8-3 最小路径覆盖问题
- 多线程_条件变量pthread_cond_t
- Android高级UI之自定义“更多”界面
- git命令与github使用(转主要看向远程仓库推内容)
- HDU N!
- 【暑假测试2】D ACdream 1125 ACfun-字典序(水)