GDI GDI+从入门到精通-第三讲GDI+编程的基本概念
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
hatchStyle:影线画刷的类型 foreColor:影线画刷线条的前景色 backColor:影线画刷线条的背景色。
14
HatchBrush创建影线画刷
创建代码如下: Color black(255,0,0,0); Color white(255,255,255,255);
HatchBrush brushA(HatchStyleHorizontal, black, white); //水平 横线
16
TextureBrush创建纹理画刷
TextureBrush(Image *image); image为图像的指针。 如: Image image(L“TEXTURE.BMP”); TextureBrush textureBrush(&image);
17
LinearGradientBrush 创建渐变画刷
destRect为指定目标区域。可为Rect类型(内部成员为INT类型),也可以RectF类型 (内部成员为REAL类型)。 srcx,srcy为图片指定区域的左上角的坐标,可为INT类型,也可为REAL类型。
24
Graphics绘制图片
srcwidth,srcheight为图片指定区域的宽度与高度,可为INT类型, 也可为REAL类型。 srcUnit为Unit的枚举成员,它指定了所用的度量单位。
8
Bitmap类的构造
Bitmap(const WCHAR *filename); //通过图片的文件名来构造一个Bitmap对象。
Bitmap(INT width, INT height, PixelFormat format = PixelFormat32bppARGB); //通过位图的宽度,位图的高度,像素格式来构造一个空的Bitmap对象,其中
HatchBrush brushB(HatchStyleVertical, black, white); //垂直坚线
HatchBrush brushC(HatchStyleCross, black, white); //十字网格线
15
HatchBrush创建影线画刷
• 前景色与背景色的关系,就像 国际象棋盘,第一块为背景色 ,第二块为前景色,第三块为 背景色,如图:
Graphics(HDC hdc); //以HDC构造Graphics,对Graphics的绘制操作,就绘制在hdc指定的位图中。
Graphics(HWND hwnd); //以HWND构造Graphics,对Graphics的绘制操作,就绘制在hwnd窗口上。
Graphics(Image *image); //Image *是GDI+中的图像指针,对Graphics的绘制操作,就绘制在image所指的图 像对象中。
反初始化代码: //销毁GDI+资源 GdiplusShutdown(uToKen);
6
透明度合成运算
透明度是像素之间的一种合成运算。它的计算公式是:
输出颜色=前景色*Alpha/255+背景色*(255-Alpha)/255
举个例子来说,假设有一个点,其颜色值为RGB(0,0,0),背景色值为 RGB(255,255,255),在进行输出时将透明度设置为100,输出的颜色为:
12
SolidBrush创建单色画刷
SolidBrush(const Color &color); 下列的代码创建了一个蓝色的单色画刷。 SolidBrush blueBrush(Color(255,0,0,255));
13
HatchBrush创建影线画刷
HatchBrush(HatchStyle hatchStyle, const Color& foreColor, const Color& backColor);
其中x,y为要绘制的指定位置。可为INT类型,也可为REAL类型。 srcx,srcy为图片指定区域的左上角坐标。可为INT类型,也可为REAL类型。 srcwidth,srcheight为图片指定区域的宽度与高度。可为INT类型,也可为 REAL类型。
22
Graphics绘制图片
srcUnit为Unit的枚举成员,它指定了所用的度量单位。比如 UnitPixel表示以像素为单位;UnitPoint表示以点为单位;UnitInch 表示以英寸为单位。一般情况下,我们是选择UnitPixel,以像素为单 位。
Pen(const Brush *brush, REAL width = 1.0f ); //brush为画刷的指针,width为画笔的宽度。通过画刷来构造
一个画笔,这种画笔绘制出来的线条,边框就犹如在一张带图案的纸 张上,剪出的指定宽度的线条,边框的效果。
19
Graphics绘制图片
把图片绘制在指定位置的方法如下:
其中x,y为要绘制的位置,可为INT类型,也可为REAL类型。 point为要绘制的位置的结构体变量,可为Point类型(内部成员为INT类型),也可为PointF类型( 内部成员为REAL类型)。
20
Graphics绘制图片
把图片绘制在指定区域的方法如下:
DrawImage(Image* image, const Rect& rect); DrawImage(Image* image, INT x, INT y, INT width, INT height); DrawImage(Image* image, const RectF& rect); DrawImage(Image* image, REAL x, REAL y, REAL width, REAL height); 其中x,y为指定矩形区域的坐上角坐标,可为INT类型,也可为REAL类型。 width,height为指定矩形区域的宽度与高度,可为INT类型,也可为REAL类 型。 rect为指定的矩形区域,可为Rect类型(内部成员为INT类型),也可为 RectF类型(内部成员为REAL类型)。
//以上四个方法为Bitmap的拷贝方法,从源位图的指定区域拷贝出新的位图 对象出来,并用format像素格式应用在新的Bitmap对象中。
10
Bitmap类的常用方法
UINT GetWidth(); //获取位图的宽度
UINT GetHeight(); //获取位图的高度
GetPixel(INT x, INT y, Color *color); //获取位图指定位置的颜色
9
Bitmap类的常用方法
Bitmap* Clone(const Rect& rect, PixelFormat format); Bitmap* Clone(INT x, INT y, INT width, INT height, PixelFormat format); Bitmap* Clone(const RectF &rect, PixelFormat format); Bitmap* Clone(REAL x, REAL y, REAL width, REAL height, PixelFormat format);
第三讲:GDI+编程的基本概念
GDI+的介绍
GDI+是Windows XP中的一个子系统,它主要负责在显示屏幕 和打印设备输出有关信息,它是一组通过C++类实现的应用程序编程 接口。
GDI+对以前的Windows版本中GDI进行了优化,并添加了许多 新的功能。作为图形设备接口的GDI+使得应用程序开发人员在输出 屏幕和打印机信息的时候无需考虑具体显示设备的细节,他们只需调用 GDI+库输出的类的一些方法即可完成图形操作。
format的默认值是PixelFormat32bppARGB,代表32位的颜色信息,颜色组成是A、 R、G、B。像素格式还有很多种,比如PixelFormat24bppRGB代表24位的颜色信息 ,颜色组成为R、G、B;比如PixelFormat16bppRGB,代表16位的颜色信息,颜色 组成为R、G、B,其中R占5位,G占6位,B占5位。等等。
2
GDI+的使用方法
在使用GDI+的cpp文件中包含GdiPlus.h文件,并引用命名空间 using namespace Gdiplus; 代码如下:
#include <GdiPlus.h> using namespace Gdiplus;
3
GDI+的使用方法
需要在项目属性中作如下设置,以支持GDI+的静态库编译:
25
Graphics绘制文字
DrawString(const WCHAR *string, INT length, const Font *font, const PointF &origin, const Brush *brush); DrawString(const WCHAR *string, INT length, const Font *font, const RectF &layoutRect, const StringFormat *stringFormat, const Brush *brush); DrawString(const WCHAR *string, INT length, const Font *font, const PointF &origin, const StringFormat *stringFormat, const Brush *brush);
DrawImage(Image* image,const Point& point); DrawImage(Image* image,INT x,INT y); DrawImage(Image* image, const PointF& point) DrawImage(Image* image, REAL x, REAL y);
21
Graphics绘制图片
把图片的指定区域绘制在指定位置的方法如下:
DrawImage(Image* image, INT x, INT y, INT srcx, INT srcy, INT srcwidth, INT srcheight, Unit srcUnit); DrawImage(Image* image, REAL x, REAL y, REAL srcx, REAL srcy, REAL srcwidth, REAL srcheight, Unit srcUnit);
Result.Red = 0*100/255+255*(255-100)/255 = 155 Result.Green = 0*100/255+255*(255-100)/255 = 155 Result.Blue = 0*100/255+255*(255-100)/255 = 155
7
Graphics类的构造
23
Graphics绘制图片
把图片的指定区域绘制在指定目标区域的方法如下:
DrawImage(Image* image, const Rect& destRect, INT srcx, INT srcy, INT srcwidth, INT srcheight, Unit srcUnit); DrawImage(Image* image, const RectF& destRect, REAL srcx, REAL srcy, REAL srcwidth, REAL srcheight, Unit srcUnit);
LinearGradientBrush(Point &point1, Point &point2, Color &color1, Color &color2);
point1为渐变的起点坐标。 point2为渐变的终点坐标。 color1为起点的颜色。 color2为终点的颜色。
18
Pen创建画笔
Pen(const Color &color, REAL width = 1.0f ); //color为画笔的颜色,width为画笔的宽度。
SetPixel(INT X, INT y, const Color &color); //设置位图指定位置的颜色
11
常用的画刷
单色画刷,类名SolidBrush,用纯色填充图形。 影线画刷,类名HatchBrush,用各种线型图案填充图形。 纹理画刷,类名TextureBrush,使用图像来填充图形。 线性渐变画刷,类名LinearGradientBrush,使用渐变的色彩填充图 形,渐变是指一种颜色沿着指定的方向慢慢变为另一种颜色。
4ห้องสมุดไป่ตู้
GDI+的使用方法
GDI+进行初始化:
//GDI+资源初始化 ULONG_PTR uToken = 0; GdiplusStartupInput gdiplusStartupInput; GdiplusStartup(&uToKen, &gdiplusStartupInput, NULL);
5
GDI+的使用方法
14
HatchBrush创建影线画刷
创建代码如下: Color black(255,0,0,0); Color white(255,255,255,255);
HatchBrush brushA(HatchStyleHorizontal, black, white); //水平 横线
16
TextureBrush创建纹理画刷
TextureBrush(Image *image); image为图像的指针。 如: Image image(L“TEXTURE.BMP”); TextureBrush textureBrush(&image);
17
LinearGradientBrush 创建渐变画刷
destRect为指定目标区域。可为Rect类型(内部成员为INT类型),也可以RectF类型 (内部成员为REAL类型)。 srcx,srcy为图片指定区域的左上角的坐标,可为INT类型,也可为REAL类型。
24
Graphics绘制图片
srcwidth,srcheight为图片指定区域的宽度与高度,可为INT类型, 也可为REAL类型。 srcUnit为Unit的枚举成员,它指定了所用的度量单位。
8
Bitmap类的构造
Bitmap(const WCHAR *filename); //通过图片的文件名来构造一个Bitmap对象。
Bitmap(INT width, INT height, PixelFormat format = PixelFormat32bppARGB); //通过位图的宽度,位图的高度,像素格式来构造一个空的Bitmap对象,其中
HatchBrush brushB(HatchStyleVertical, black, white); //垂直坚线
HatchBrush brushC(HatchStyleCross, black, white); //十字网格线
15
HatchBrush创建影线画刷
• 前景色与背景色的关系,就像 国际象棋盘,第一块为背景色 ,第二块为前景色,第三块为 背景色,如图:
Graphics(HDC hdc); //以HDC构造Graphics,对Graphics的绘制操作,就绘制在hdc指定的位图中。
Graphics(HWND hwnd); //以HWND构造Graphics,对Graphics的绘制操作,就绘制在hwnd窗口上。
Graphics(Image *image); //Image *是GDI+中的图像指针,对Graphics的绘制操作,就绘制在image所指的图 像对象中。
反初始化代码: //销毁GDI+资源 GdiplusShutdown(uToKen);
6
透明度合成运算
透明度是像素之间的一种合成运算。它的计算公式是:
输出颜色=前景色*Alpha/255+背景色*(255-Alpha)/255
举个例子来说,假设有一个点,其颜色值为RGB(0,0,0),背景色值为 RGB(255,255,255),在进行输出时将透明度设置为100,输出的颜色为:
12
SolidBrush创建单色画刷
SolidBrush(const Color &color); 下列的代码创建了一个蓝色的单色画刷。 SolidBrush blueBrush(Color(255,0,0,255));
13
HatchBrush创建影线画刷
HatchBrush(HatchStyle hatchStyle, const Color& foreColor, const Color& backColor);
其中x,y为要绘制的指定位置。可为INT类型,也可为REAL类型。 srcx,srcy为图片指定区域的左上角坐标。可为INT类型,也可为REAL类型。 srcwidth,srcheight为图片指定区域的宽度与高度。可为INT类型,也可为 REAL类型。
22
Graphics绘制图片
srcUnit为Unit的枚举成员,它指定了所用的度量单位。比如 UnitPixel表示以像素为单位;UnitPoint表示以点为单位;UnitInch 表示以英寸为单位。一般情况下,我们是选择UnitPixel,以像素为单 位。
Pen(const Brush *brush, REAL width = 1.0f ); //brush为画刷的指针,width为画笔的宽度。通过画刷来构造
一个画笔,这种画笔绘制出来的线条,边框就犹如在一张带图案的纸 张上,剪出的指定宽度的线条,边框的效果。
19
Graphics绘制图片
把图片绘制在指定位置的方法如下:
其中x,y为要绘制的位置,可为INT类型,也可为REAL类型。 point为要绘制的位置的结构体变量,可为Point类型(内部成员为INT类型),也可为PointF类型( 内部成员为REAL类型)。
20
Graphics绘制图片
把图片绘制在指定区域的方法如下:
DrawImage(Image* image, const Rect& rect); DrawImage(Image* image, INT x, INT y, INT width, INT height); DrawImage(Image* image, const RectF& rect); DrawImage(Image* image, REAL x, REAL y, REAL width, REAL height); 其中x,y为指定矩形区域的坐上角坐标,可为INT类型,也可为REAL类型。 width,height为指定矩形区域的宽度与高度,可为INT类型,也可为REAL类 型。 rect为指定的矩形区域,可为Rect类型(内部成员为INT类型),也可为 RectF类型(内部成员为REAL类型)。
//以上四个方法为Bitmap的拷贝方法,从源位图的指定区域拷贝出新的位图 对象出来,并用format像素格式应用在新的Bitmap对象中。
10
Bitmap类的常用方法
UINT GetWidth(); //获取位图的宽度
UINT GetHeight(); //获取位图的高度
GetPixel(INT x, INT y, Color *color); //获取位图指定位置的颜色
9
Bitmap类的常用方法
Bitmap* Clone(const Rect& rect, PixelFormat format); Bitmap* Clone(INT x, INT y, INT width, INT height, PixelFormat format); Bitmap* Clone(const RectF &rect, PixelFormat format); Bitmap* Clone(REAL x, REAL y, REAL width, REAL height, PixelFormat format);
第三讲:GDI+编程的基本概念
GDI+的介绍
GDI+是Windows XP中的一个子系统,它主要负责在显示屏幕 和打印设备输出有关信息,它是一组通过C++类实现的应用程序编程 接口。
GDI+对以前的Windows版本中GDI进行了优化,并添加了许多 新的功能。作为图形设备接口的GDI+使得应用程序开发人员在输出 屏幕和打印机信息的时候无需考虑具体显示设备的细节,他们只需调用 GDI+库输出的类的一些方法即可完成图形操作。
format的默认值是PixelFormat32bppARGB,代表32位的颜色信息,颜色组成是A、 R、G、B。像素格式还有很多种,比如PixelFormat24bppRGB代表24位的颜色信息 ,颜色组成为R、G、B;比如PixelFormat16bppRGB,代表16位的颜色信息,颜色 组成为R、G、B,其中R占5位,G占6位,B占5位。等等。
2
GDI+的使用方法
在使用GDI+的cpp文件中包含GdiPlus.h文件,并引用命名空间 using namespace Gdiplus; 代码如下:
#include <GdiPlus.h> using namespace Gdiplus;
3
GDI+的使用方法
需要在项目属性中作如下设置,以支持GDI+的静态库编译:
25
Graphics绘制文字
DrawString(const WCHAR *string, INT length, const Font *font, const PointF &origin, const Brush *brush); DrawString(const WCHAR *string, INT length, const Font *font, const RectF &layoutRect, const StringFormat *stringFormat, const Brush *brush); DrawString(const WCHAR *string, INT length, const Font *font, const PointF &origin, const StringFormat *stringFormat, const Brush *brush);
DrawImage(Image* image,const Point& point); DrawImage(Image* image,INT x,INT y); DrawImage(Image* image, const PointF& point) DrawImage(Image* image, REAL x, REAL y);
21
Graphics绘制图片
把图片的指定区域绘制在指定位置的方法如下:
DrawImage(Image* image, INT x, INT y, INT srcx, INT srcy, INT srcwidth, INT srcheight, Unit srcUnit); DrawImage(Image* image, REAL x, REAL y, REAL srcx, REAL srcy, REAL srcwidth, REAL srcheight, Unit srcUnit);
Result.Red = 0*100/255+255*(255-100)/255 = 155 Result.Green = 0*100/255+255*(255-100)/255 = 155 Result.Blue = 0*100/255+255*(255-100)/255 = 155
7
Graphics类的构造
23
Graphics绘制图片
把图片的指定区域绘制在指定目标区域的方法如下:
DrawImage(Image* image, const Rect& destRect, INT srcx, INT srcy, INT srcwidth, INT srcheight, Unit srcUnit); DrawImage(Image* image, const RectF& destRect, REAL srcx, REAL srcy, REAL srcwidth, REAL srcheight, Unit srcUnit);
LinearGradientBrush(Point &point1, Point &point2, Color &color1, Color &color2);
point1为渐变的起点坐标。 point2为渐变的终点坐标。 color1为起点的颜色。 color2为终点的颜色。
18
Pen创建画笔
Pen(const Color &color, REAL width = 1.0f ); //color为画笔的颜色,width为画笔的宽度。
SetPixel(INT X, INT y, const Color &color); //设置位图指定位置的颜色
11
常用的画刷
单色画刷,类名SolidBrush,用纯色填充图形。 影线画刷,类名HatchBrush,用各种线型图案填充图形。 纹理画刷,类名TextureBrush,使用图像来填充图形。 线性渐变画刷,类名LinearGradientBrush,使用渐变的色彩填充图 形,渐变是指一种颜色沿着指定的方向慢慢变为另一种颜色。
4ห้องสมุดไป่ตู้
GDI+的使用方法
GDI+进行初始化:
//GDI+资源初始化 ULONG_PTR uToken = 0; GdiplusStartupInput gdiplusStartupInput; GdiplusStartup(&uToKen, &gdiplusStartupInput, NULL);
5
GDI+的使用方法