本文共 2378 字,大约阅读时间需要 7 分钟。
typedef unsigned char BYTE;typedef unsigned short WORD;typedef unsigned int DWORD;typedef unsigned long LONG;#pragma pack(1)typedef struct tagBITMAPFILEHEADER { WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits;} BITMAPFILEHEADER;typedef struct tagBITMAPINFOHEADER { DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant;} BITMAPINFOHEADER;typedef struct tagRGBQUAD { BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved;} RGBQUAD;#pragma pack()void SaveImg(unsigned char * pData, int iWidth, int iHeight, string strPath){ BITMAPFILEHEADER targetfileheader; BITMAPINFOHEADER targetinfoheader; memset(&targetfileheader, 0, sizeof(BITMAPFILEHEADER)); memset(&targetinfoheader, 0, sizeof(BITMAPINFOHEADER)); targetfileheader.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + (DWORD)sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD); targetinfoheader.biSize = iWidth * iHeight + sizeof(RGBQUAD) * 256 + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); targetfileheader.bfReserved1 = 0; targetfileheader.bfReserved2 = 0; targetfileheader.bfType = 0x4D42; targetinfoheader.biBitCount = 8; targetinfoheader.biSize = sizeof(BITMAPINFOHEADER); targetinfoheader.biHeight = iHeight; targetinfoheader.biWidth = iWidth; targetinfoheader.biPlanes = 1; targetinfoheader.biCompression = 0; targetinfoheader.biSizeImage = 0; targetinfoheader.biXPelsPerMeter = 0; targetinfoheader.biYPelsPerMeter = 0; targetinfoheader.biClrImportant = 0; targetinfoheader.biClrUsed = 0; RGBQUAD rgbquad[256]; for (int i = 0; i < 256; i++) { rgbquad[i].rgbBlue = i; rgbquad[i].rgbGreen = i; rgbquad[i].rgbRed = i; rgbquad[i].rgbReserved = 0; } FILE * fp = fopen(strPath.c_str(), "wb"); fwrite(&targetfileheader, sizeof(BITMAPFILEHEADER), 1, fp); fwrite(&targetinfoheader, sizeof(BITMAPINFOHEADER), 1, fp); fwrite(&rgbquad, sizeof(RGBQUAD), 256, fp); for (int i = 0; i < iHeight; i++) { fwrite(pData + (iHeight - 1 - i) * iWidth, iWidth, 1, fp); } fclose(fp);}
转载地址:http://gglai.baihongyu.com/