[原]將BITMAPINFO保存成bmp文件,以及渲染到設備


/*
        class Image
        {
        public:
            Image() = delete;
            Image(const uint32_t& _w, const uint32_t& _h)
                :w(_w), h(_h) {
                data = new byte[w*h * 4];
            };
            ~Image() { if (data) { delete[] data; } }
            uint32_t w;
            uint32_t h;
            byte* data;
        };
*/

        BITMAPINFO dib;
    memset(&dib, 0, sizeof(BITMAPINFO));
    dib.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    dib.bmiHeader.biWidth = image->w;
    dib.bmiHeader.biHeight =-(int) image->h;
    dib.bmiHeader.biPlanes = 1;
    dib.bmiHeader.biBitCount = 32;
    dib.bmiHeader.biCompression = BI_RGB;
    dib.bmiHeader.biSizeImage = image->w *  image->h * 4;

    BITMAPFILEHEADER fileHeader;
    fileHeader.bfType = 0x4d42; // BM
    fileHeader.bfReserved1 = 0;
    fileHeader.bfReserved2 = 0;
    fileHeader.bfSize = image->w * image->h * 4 + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
    fileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
    CFile file;
    
//保存到文件
    if (file.Open("E:\\temp\\1.bmp", CFile::modeCreate | CFile::modeWrite))
    {
        file.Write(&fileHeader, sizeof(BITMAPFILEHEADER));
        file.Write(&dib.bmiHeader, sizeof(BITMAPINFOHEADER));
        file.Write(image->data, image->w * image->h * 4);
        file.Close();
    }

//渲染到設備
    SetDIBitsToDevice(this->GetDC()->GetSafeHdc(), 0, 0, image->w, image->h,
        0, 0, 0, image->h,
        image->data, &dib, DIB_RGB_COLORS);
    

    

 測試可行

參考:https://www.cnblogs.com/wangguchangqing/p/5432227.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM