如何在vc下保存bmp文件,请高手给予指点! 普通的写文件就行,文件开头写上"MB",填充BITMAPFILEHEADER和BITMAPINFOHEADER,将这两个头写进去写图像数据 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 提供一个写bmp文件的函数:int LQwrite_bmp(char* filename,uint8_t *pRGBBuffer,int width,int height,int ibitCount){ BITMAPFILEHEADER bmpheader; BITMAPINFO bmpinfo; FILE *fp; fp = fopen(filename,"wb"); if(!fp)return -1; bmpheader.bfType = ('M'<<8)|'B'; bmpheader.bfReserved1 = 0; bmpheader.bfReserved2 = 0; bmpheader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); bmpheader.bfSize = bmpheader.bfOffBits + width*height*ibitCount/8; bmpinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmpinfo.bmiHeader.biWidth = width; bmpinfo.bmiHeader.biHeight = height; bmpinfo.bmiHeader.biPlanes = 1; bmpinfo.bmiHeader.biBitCount = ibitCount; bmpinfo.bmiHeader.biCompression = BI_RGB; bmpinfo.bmiHeader.biSizeImage = 0; bmpinfo.bmiHeader.biXPelsPerMeter = 100; bmpinfo.bmiHeader.biYPelsPerMeter = 100; bmpinfo.bmiHeader.biClrUsed = 0; bmpinfo.bmiHeader.biClrImportant = 0; fwrite(&bmpheader,sizeof(BITMAPFILEHEADER),1,fp); fwrite(&bmpinfo.bmiHeader,sizeof(BITMAPINFOHEADER),1,fp); fwrite(pRGBBuffer,width*height*ibitCount/8,1,fp); fclose(fp); return 0;} 填充BITMAPFILEHEADER和BITMAPINFOH如何是小于24位的位图还需要把系统当前调色板拷贝到BITMAPINFO.bmiColors中 1. 先用GetDIBits由DDB转化成DIB;2. 加上 BITMAPFILEHEADER 和 BITMAPINFO 就是bmp文件的内容了. CListCtrl,LVS_LIST样式如何添加竖直滚动条? c++编程软件出问题了 关于鼠标消息! 程序员职业交流群 59330154 在一个类内定义和实现的消息响应函数,能不能在另一个类中发送消息使其得到响应? 动态改变工具栏上某个按钮的表面颜色 文件创建的问题! 如何传递这种参数? ####关于“消息队列”的疑惑#### 请教RTX插件开发问题。 如何GDI将内存中的24位BMP图片象素显示出来? 自动注册数据源之后如何确定m_nFields 值的大小?
int LQwrite_bmp(char* filename,uint8_t *pRGBBuffer,int width,int height,int ibitCount)
{
BITMAPFILEHEADER bmpheader;
BITMAPINFO bmpinfo;
FILE *fp; fp = fopen(filename,"wb");
if(!fp)return -1; bmpheader.bfType = ('M'<<8)|'B';
bmpheader.bfReserved1 = 0;
bmpheader.bfReserved2 = 0;
bmpheader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bmpheader.bfSize = bmpheader.bfOffBits + width*height*ibitCount/8;
bmpinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmpinfo.bmiHeader.biWidth = width;
bmpinfo.bmiHeader.biHeight = height;
bmpinfo.bmiHeader.biPlanes = 1;
bmpinfo.bmiHeader.biBitCount = ibitCount;
bmpinfo.bmiHeader.biCompression = BI_RGB;
bmpinfo.bmiHeader.biSizeImage = 0;
bmpinfo.bmiHeader.biXPelsPerMeter = 100;
bmpinfo.bmiHeader.biYPelsPerMeter = 100;
bmpinfo.bmiHeader.biClrUsed = 0;
bmpinfo.bmiHeader.biClrImportant = 0; fwrite(&bmpheader,sizeof(BITMAPFILEHEADER),1,fp);
fwrite(&bmpinfo.bmiHeader,sizeof(BITMAPINFOHEADER),1,fp);
fwrite(pRGBBuffer,width*height*ibitCount/8,1,fp);
fclose(fp); return 0;
}
如何是小于24位的位图还需要把系统当前调色板拷贝到BITMAPINFO.bmiColors中
2. 加上 BITMAPFILEHEADER 和 BITMAPINFO 就是bmp文件的内容了.