您的位置:首页 > 其它

保存 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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: