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

转载于:https://www.cnblogs.com/lyggqm/p/11126309.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值