|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
window api 实现,将已经获得的图像hbitmap输出成为一个位图文件,我使用了以下函数去实现
int SaveBitmapToFile(HBITMAP hbitmap,LPSTR lpFileName)
{
BITMAP bitmap;
GetObject(hbitmap,sizeof(HBITMAP),&bitmap);
FILE *fp = fopen(lpFileName, "w+b");
BITMAPINFOHEADER bitinfoh = {0};//设置位图信息头
bitinfoh.biBitCount = bitmap.bmBitsPixel;//每个像素字节大小
bitinfoh.biCompression = BI_RGB; //当biCompression成员的值是BI_RGB时,它没有调色板
bitinfoh.biHeight = bitmap.bmHeight;//高度
bitinfoh.biPlanes = 1;
bitinfoh.biSize = sizeof(BITMAPINFOHEADER);
bitinfoh.biSizeImage = bitmap.bmWidthBytes * bitmap.bmHeight;//图像数据大小
bitinfoh.biWidth = bitmap.bmWidth;//宽度
BITMAPFILEHEADER bitfileh = {0}; //设置位图文件头
bitfileh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);//到位图数据的偏移量
bitfileh.bfSize = bitfileh.bfOffBits + bitmap.bmWidthBytes * bitmap.bmHeight;//文件总的大小
bitfileh.bfType = (WORD)0x4d42;
byte *p = new byte[bitmap.bmWidthBytes * bitmap.bmHeight];//设置图像像素信息,图像信息
//至此,位图四部分完成,即位图文件头,位图信息头,调色板(本码中无调色板),图像信息
//下面将信息写入文件
fwrite(&bitfileh, 1, sizeof(BITMAPFILEHEADER), fp);//写入位图文件头
fwrite(&bitinfoh, 1, sizeof(BITMAPINFOHEADER), fp);//写入位图信息头
fwrite(p, 1, bitmap.bmWidthBytes * bitmap.bmHeight, fp);//写入位图数据
delete [] p;
fclose(fp);
return TRUE;
}
但是问题是,编译通过,运行时,程序占用非常多内存,而且无法结束,强行关闭程序,结果输出了将近大小1G的位图文件,初接触,请问上面的函数问题在哪里啊 |
|