[原]将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