GDI+ Graphics类

1 GDI+的核心:Graphics类


(1)The Graphics class provides methods for drawing lines, curves, figures, images, and text. A Graphics object stores attributes of the display device and attributes of the items to be drawn.【msdn】

        Graphics是一个device context和你的drawing conetent之间的一个中介。它存储了device context的相关属性,以及drawing content的属性。这样,它就能用自己的方法把drawing content“映射”到device content 之上。

(2)GDI+的核心是Graphics类,包含了显示、绘图等功能。它提供了四个构造函数:
   Graphics::Graphics(Image*)
   Graphics::Graphics(HDC)
   Graphics::Graphics(HDC,HANDLE)
   Graphics::Graphics(HWND,BOOL)

   构造函数1从image对象创建一个Graphics类。这种方式允许你在打开某张,或者生成某张位图之后,应用Grapgics的方法对改位图进行操作。

   构造函数2从一个传统的HDC获取一个Graphics对象,把传统的在HDC完成的操作接手过来。也就是当要画直线,曲线,图形等时,采用这种构造函数。

   后面两种构造函数这里不说了!

(3)如果读者有GDI编程经验的话,应该会联想起CDC::CreateCompatibleDC和CBitmap::
CreateCompatibleBitmap吧?再列举Graphics中有代表性的用于绘图的成员函数:
   Graphics::DrawArc(Pen*,INT,INT,INT,INT,REAL,REAL)
   Graphics::DrawBeziers(Pen*,Point*,INT)
   Graphics::DrawClosedCurve(Pen*,Point*,INT)
   Graphics::DrawCurve(Pen*,Point*,INT)
   Graphics::DrawEllipse(Pen*,Rect&)
   Graphics::DrawImage(Image*,RectF&)
   Graphics::DrawLine(Pen*,Point&,Point&)
   Graphics::DrawPie(Pen*,Rect&,REAL,REAL)
   Graphics::DrawPolygon(Pen*,Point*,INT*)
   Graphics::DrawRectangle(Pen*,Rect&)
   是不是非常象CDC?从这里大家也能猜出一点Graphics类和CDC类的异同吧!简单的说,Graphics的层次更高一些,封装的更好。

 

2  GDI+的几个特点:

   (1)传统的GDI编程最痛苦的是什么?是不停的CreateObject,SeleteObject,DeleteObject——代码繁琐,一不小心还会内存泄露……现在GDI+结束了这一切,就凭这一个理由,也足够我们转向GDI+了,呵呵。从上面的几个成员函数可以看出来,每个绘图动作都指定了画笔、刷子或者Image,完全抛弃了SelectObject的概念。

   (2)GDI+里面的颜色更加丰富,全面支持32位色,从Color类的构造函数就可以看出来:

           Color::Color(BYTE a, BYTE r, BYTE g, BYTE b);其中a就是透明度。

   (3)GDI+里的所有函数都只接受Unicode字符串,编写代码的时候需要注意这一点。  

 

你可能感兴趣的:(编程,image,byte,attributes,methods,GDI+)