C++/MFC/GDI+(七)——获取Graphics中的图像数据

 GDI+中的各种描画方法虽然很好用,但如果想获得一个Graphics中已经画好的内容却不那么容易了。做了一些尝试后,我用以下方法解决了这个问题。

TAG:  GDIPlus  
 

GDI+中的各种描画方法虽然很好用,但如果想获得一个Graphics中已经画好的内容却不那么容易了。做了一些尝试后,我用以下方法解决了这个问题。

首先,获得源Graphics的HDC,这个通过GetHDC()就能得到。 
然后建立一个CDC,通过Attach(HDC hdc)使一个CDC与刚刚获取的HDC关联。 
再建立一个目标CDC。 CBitmap TempBmp;
TempBmp.CreateCompatibleBitmap(pDC, /*图片宽*/,  /*图片高*/ );
TempDC.SelectObject(TempBmp);
然后自然是Bitblt了。 
到这里,虽然已经基本完成了任务。但为了以后方便,我又做了点工作。

获得目标DC的CBitmap对象。这个通过CDC的GetCurrentBitmap()就能得到。

建立一个Bitmap对象,注意是GDI+的Bitmap对象。通过Bitmap( HBITMAP, HPALETTE)这个构造函数建立,后面的调色板直接给一个NULL就可以了。前面的HBITMAP也可以直接将CBitmap对象赋进去,这里要注意到是,不是Cbitmap*而是CBitmap。

Bitmap BitmapTemp = new Bitmap(TempBmp,NULL);
之后,这个Bitmap对象就可以自由的在GDI+中使用了。通过其Clone方法也可以方便的复制出任意个副本,注意释放就行了。

BitmapTemp->Clone( 0, 0,  /*图片宽*/,  /*图片高*/, PixelFormat32bppARGB);
PixelFormat32bppARGB是图像的格式。MSDN上有详细的说明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值