位图保存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);
    }

    EMail: * 填写邮箱将发送站长回复,邮箱掩码显示于网页