位图保存C代码
From: xuyibo.net Date: 2007-10-31 08:38 AM
很早写的代码,比较简单,共享一下。
I use Windows API to implement the original bitmap saving code, here is the code.
void SaveRGBFile(char* path, int nWidth, int nHeight, char* RGBDate)
{
DWORD dwSize;
HANDLE hFile;
BITMAPINFOHEADER bihInfo;
BITMAPFILEHEADER bfhFile;
bihInfo.biSize = sizeof(BITMAPINFOHEADER);
bihInfo.biWidth = nWidth;
bihInfo.biHeight = nHeight;
bihInfo.biPlanes = 1;
bihInfo.biBitCount = 24;
bihInfo.biCompression = BI_RGB;
bihInfo.biSizeImage = nWidth * nHeight * 3;
bihInfo.biXPelsPerMeter = 0;
bihInfo.biYPelsPerMeter = 0;
bihInfo.biClrUsed = 0;
bihInfo.biClrImportant = 0;
bfhFile.bfType = 0x4D42;
bfhFile.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bfhFile.bfSize = bfhFile.bfOffBits + bihInfo.biSizeImage;
bfhFile.bfReserved1 = 0;
bfhFile.bfReserved2 = 0;
hFile = CreateFile(path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
WriteFile(hFile, &bfhFile, sizeof(BITMAPFILEHEADER), &dwSize, NULL);
WriteFile(hFile, &bihInfo, sizeof(BITMAPINFOHEADER), &dwSize, NULL);
WriteFile(hFile, RGBDate, bihInfo.biSizeImage, &dwSize, NULL);
CloseHandle(hFile);
}
Some code i write using C runtime library:
void SaveRGBFile(char* path, int nWidth, int nHeight, char* RGBDate)
{
FILE* hFile;
BITMAPINFOHEADER bihInfo;
BITMAPFILEHEADER bfhFile;
bihInfo.biSize = sizeof(BITMAPINFOHEADER);
bihInfo.biWidth = nWidth;
bihInfo.biHeight = nHeight;
bihInfo.biPlanes = 1;
bihInfo.biBitCount = 24;
bihInfo.biCompression = BI_RGB;
bihInfo.biSizeImage = nWidth * nHeight * 3;
bihInfo.biXPelsPerMeter = 0;
bihInfo.biYPelsPerMeter = 0;
bihInfo.biClrUsed = 0;
bihInfo.biClrImportant = 0;
bfhFile.bfType = 0x4D42;
bfhFile.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bfhFile.bfSize = bfhFile.bfOffBits + bihInfo.biSizeImage;
bfhFile.bfReserved1 = 0;
bfhFile.bfReserved2 = 0;
hFile = fopen(path, 'wb');
fwrite(&bfhFile, sizeof(char), sizeof(BITMAPFILEHEADER), hFile);
fwrite(&bihInfo, sizeof(char), sizeof(BITMAPINFOHEADER), hFile);
fwrite(&RGBDate, sizeof(char), bihInfo.biSizeImage, hFile);
fclose(hFile);
}