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

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

  1. 首先,获得源GraphicsHDC,这个通过GetHDC()就能得到。
  2. 然后建立一个CDC,通过Attach(HDC hdc)使一个CDC与刚刚获取的HDC关联。
  3. 再建立一个目标CDC
    CBitmap TempBmp;
    TempBmp.CreateCompatibleBitmap(pDC, /*图片宽*/,  /*图片高*/ );
    TempDC.SelectObject(TempBmp);
  4. 然后自然是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上有详细的说明。

 

你可能感兴趣的:(C++)