C++图片保存,加载(LoadImage()),编辑,资源句柄(HBITMAP )的使用总结

这段代码是需要在win窗口的程序下使用的,   hWnd这个是窗口的句柄

如果是控制台的话要整个HCD的话用 CreateCompatiblNULL);

创建兼容 DC 功能 (wingdi.h)——》这里有对CreateCompatiblNULL)的解释

PAINTSTRUCT ps;
        HDC dc = BeginPaint(hWnd, &ps);//与下面的配对使用EndPaint//这个配套是在窗口程序里的

{

        //绘制位图
        //创建一个兼容的dc
        HDC hMemDc  = CreateCompatibleDC(dc);

//加载资源图片        

HBITMAP hBitmap = (HBITMAP)LoadImage(gInstance, "02.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

        if (hBitmap)
        {
            //获取图片的宽高
            BITMAP bmp;
            GetObject(hBitmap, sizeof(bmp), &bmp);//将资源句柄放进去拿出图片的宽高信息

            SelectObject(hMemDc, hBitmap);//hMemDc将这个CD绑定进图片的资源句柄里面

//将图片拷贝到设备的dc里面           

 BitBlt(dc, 0, 0, bmp.bmWidth, bmp.bmHeight, hMemDc, 0, 0, SRCCOPY);

//也可以拷贝到图片的CD里面

HDC memDC = CreateCompatibleDC ( hMemDc  );//创建一个与上个图片兼容的CD

HBITMAP memBM = CreateCompatibleBitmap ( hMemDc  , nWidth, nHeight );//创建一个与上个图片兼容的位图

SelectObject ( memDC, memBM );将新建的CD(memDC )绑定到新的位图上

//将上个位图拷贝到新建的位图memDC里可以设置坐标,;拼接图片也可以用这个

BitBlt(memDC , 0, 0, bmp.bmWidth, bmp.bmHeight, hMemDc, 0, 0, SRCCOPY);


        }
        
        DeleteDC(hMemDc);

}
        EndPaint(hWnd, &ps);

以上是C的处理方式

有个类叫“CImage”类,好东西价格头文件atlimage.h就能用

CImage 类 | Microsoft Docs

CImage tt;

tt 就等于是HBITMAP(资源句柄)可以这样写

tt=CreateCompatibleBitmap ( hMemDc  , nWidth, nHeight );

tt.GetCD();

然后直接 tt.Save(L"new.jpg");就可以保存成图片,直接在后缀改成.png就是png图片了

是不是很方便?赶快感谢我吧

可惜这个不支持tif,但是,作为一个程序元,这是事儿吗?

这是事儿!

找了好几天,终于找到能搞tif后缀的代码了,就是我发表的另外一篇关于TIFF的,用GDI+弄得

但是没法整到内存里,只能保存到磁盘里。。。(因该是我不会)

经过目不转睛地看GDI+的方法,终于找到了一个获取资源句柄的方法了。。虽然找不到HCD,但找到这个也行啦,利用上面的CImage,不就成了吗?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值