GDI+学习笔记(三)绘制一张简单的图片

来源:互联网 发布:与淘宝相似的软件 编辑:程序博客网 时间:2024/05/16 13:53

这回将绘制一张简单的图片,之所以称之为简单的,是因为我们只会绘制png/jpg/bmp等单帧的图片,而不会绘制gif,不要跟我说jpg什么的也可以有多帧。那些所谓的多帧jpg图片内部的存储结构实际上是gif,只是因为各种原因,后缀被人为改成了jpg或png而已。


闲话不多,开始正题。

(一)创建一个Graphics对象

Graphics对应与一个DC句柄相关联,DC也就是设备描述表,作为使用者的我们,其实不必太过关心其意义,当然为了显得很博学,而且时间很充裕的话,可以选择百度一下,我这里就不浪费笔墨了。

DC的获得可以通过windows API : GetDC()取得。它的函数原型如下:

HDC GetDC(HWND hWnd)
也就是说你只要拥有一个windows句柄就可以获得这个DC句柄,在MFC中同样可以获得,差异不大。现在看看给Graphics初始化:

Graphics graphics(hdc);

如果你不确定什么时候能够得到hdc,那么你也可以使用指针,这样更方便一些,不是么?只是要记得释放。

Graphics *pGraphics = new Graphics(hdc);

(二)初始化图像

以后,我们都会使用指针来创建对象了,不在赘述。

现在我们需要一个Image指针,并且为它new一个对象,代码如下:

Image *pImage;pImage = new Image("mylove.jpg");

这里有个重要的事情差点被忽略了,我们应该确保在new之后,这张图元确实被成功加载了。

if(pImage->GetLastStatus() != Ok){return false;}


(三) 绘制图像

绘制图像的函数,在GDI+中被重载了很多种,我们这里简单介绍两种。

if (pGraphics != NULL)      pGraphics->DrawImage(pImage, 0, 0);


这种是要将image绘制到设备的(0,0)位置上去。

然后,再看一种:

if (pGraphics != NULL)       pGraphics->DrawImage(pImage, 0, 0, 100, 200);

这种也很好理解,就是要将pImage图像绘制到设备的0,0,位置上,并且它的宽度为100,高度为200.

(四)其他

看了上面两种方法,就会发现GDI+很简单吧。这里还需要知道一些重要的事情。

GDI+重载的不仅仅是DrawImage,它同样冲在了Graphics的构造函数,我们不但可以使用无参的Graphics,也可以使用Bitmap*来进行初始化,这样做有什么好处,我们将会在双缓冲一节中详细介绍。


0 0
原创粉丝点击