admin 管理员组文章数量: 887006
windows编程之GDI绘图
文章目录
- @[toc]
- windows编程之GDI绘图--点线绘制
- 点绘制
- SetPixel
- SetPixelV
- GetPixel
- 直线绘制
- MoveToEx
- LineTo
- 折线绘制
- Polyline
- PolylineTo
- PolyPolyline
- PolyBezier
- @[toc]
- 点绘制
- SetPixel
- SetPixelV
- GetPixel
- 直线绘制
- MoveToEx
- LineTo
- 折线绘制
- Polyline
- PolylineTo
- PolyPolyline
- PolyBezier
windows编程之GDI绘图–点线绘制
点绘制
- SetPixel (绘制一个像素点为指定颜色)
- GetPixel (获得一个像素点的颜色)
- SetPixelV (比 SetPixel 快)
SetPixel
-
API 函数原型:
COLORREF SetPixel(_In_ HDC hdc,_In_ int x,_In_ int y,_In_ COLORREF crColor );
注释:In 说明该参数是输入的,opt 说明该参数是可选参数。
参数解析:
参数 | 含义 |
---|---|
hdc | 设备环境句柄 |
x | 指定要设置的像素点的 X 轴坐标,按逻辑单位表示坐标 |
y | 指定要设置的像素点的 Y 轴坐标,按逻辑单位表示坐标 |
crColor | 【1】指定该像素点的颜色 【2】使用 RGB 宏创建 COLORREF 的颜色值 |
注释:COLORREF 颜色被定义为 DWORD 类型(4 个字节),用于表示 RGB 颜色。
返回值:
-
如果函数调用成功,那么返回值就是函数设置像素的 RGB 颜色值(这个值可能与 crColor 指定的颜色有所不同,之所以有时发生这种情况是因为没有找到对指定颜色进行真正匹配造成的);
-
如果函数调用失败,那么返回值是 -1。
可以是以下值
返回值 | 含义 |
---|---|
ERROR_INVALID_PARAMETER | 一个或者多个参数不正确 |
备注:
-
如果像素点坐标位于当前剪裁区之外,那么该函数执行失败。
-
不是所有设备都支持 SetPixel 函数。有关详情,请参考 GetDeviceCaps。
SetPixelV
参数与SetPixel
是一样的
SetPixelV 函数比 SetPixel 函数快,因为 SetPixelV 不需要返回实际绘制的像素值(返回布尔类型)。
返回值:
-
如果函数调用成功,返回值为非 0;
-
如果函数调用失败,返回值为 0。
GetPixel
-
API 函数原型:
COLORREF GetPixel(_In_ HDC hdc,_In_ int nXPos,_In_ int nYPos );
注释:In 说明该参数是输入的,opt 说明该参数是可选参数。
参数解析:
参数 | 含义 |
---|---|
hdc | 设备环境句柄 |
nXPos | 指定要获取的像素点的 X 轴坐标,按逻辑单位表示坐标 |
nYPos | 指定要获取的像素点的 Y 轴坐标,按逻辑单位表示坐标 |
返回值:
-
返回值是 COLORREF 值,指定像素的 RGB(可以通过 GetRValue、GetGValue 和 GetBValue 宏分别获得红、绿、蓝分别的色值);
-
如果指定的像素点在当前剪裁区之外;那么返回值是
CLR_INVALID
。
备注:
-
如果像素点坐标位于当前剪裁区之外,那么该函数执行失败。
-
不是所有设备都支持 GetPixel 函数。有关详情,请参考 GetDeviceCaps。
-
位图必须选入设备环境中,否则也会返回 CLR_INVALID
-
返回值CLR_INVALID (
0xFFFFFFFF
在 Wingdi.h) 中定义
直线绘制
-
MoveToEx (指定直线的起点)
-
LinetTo (指定直线的终点)
MoveToEx
MoveToEx 函数将当前绘图位置移动到某个具体的点,同时也可获得之前位置的坐标。
- API 函数原型:
BOOL MoveToEx(_In_ HDC hdc,_In_ int X,_In_ int Y,_Out_ LPPOINT lpPoint
);
参数解析:
参数 | 含义 |
---|---|
hdc | 指定设备环境句柄 |
X | 指定新位置的 X 轴坐标,按逻辑单位表示坐标 |
Y | 指定新位置的 Y 轴坐标,按逻辑单位表示坐标 |
lpPoint | 1. 一个 POINT 结构的指针,用于获得之前位置的坐标 2. 如果这个值是 NULL,则不会获得之前位置的坐标 |
返回值:
-
如果函数调用成功,返回值是非 0;
-
如果函数调用失败,返回值是 0。
备注:
-
MoveExTo 函数将影响所有的绘图函数。
-
在默认的设备环境中,点 (0, 0) 为最初设定的当前位置。
LineTo
LineTo 函数使用当前画笔绘制一条线,线段从当前位置连到一个指定的点 (x, y)。
当这个函数调用完毕后,当前位置变成 (x, y)。
- API 函数原型:
BOOL LineTo(_In_ HDC hdc,_In_ int nXEnd,_In_ int nYEnd
);
注释:In 说明该参数是输入的,opt 说明该参数是可选参数。
参数解析:
参数 | 含义 |
---|---|
hdc | 指定设备环境句柄 |
nXEnd | 【1】线段终点X坐标位置,采用逻辑坐标表示。 【2】这个点不会实际画出来,因为它不属于线段的一部份 |
nYEnd | 【1】线段终点Y坐标位置,采用逻辑坐标表示。【2】这个点不会实际画出来,因为它不属于线段的一部份 |
返回值:
-
如果函数调用成功,返回值是非 0;
-
如果函数调用失败,返回值是 0。
折线绘制
- Polyline
- PolylineTo
- PolyPolyline
- PolyBezier (贝塞尔曲线)
Polyline
Polyline 函数将指定数组的连接点绘制成一系列线段(折线)。
-
API 函数原型:
BOOL Polyline(_In_ HDC hdc,_In_ const POINT *lppt,_In_ int cPoints );
注释:In 说明该参数是输入的。
参数解析:
参数 | 含义 |
---|---|
hdc | 指定设备环境句柄 |
lppt | 一个指向 POINT 结构 的数组的指针(折线的顶点) |
cPoints | 【1】lppt 参数指向的数组中顶点POINT 结构 的个数 【2】该值必须大于或等于 2 |
返回值:
-
如果函数调用成功,返回值是非 0;
-
如果函数调用失败,返回值是 0。
备注:
-
该折线是使用当前画笔,通过将指定数组中的顶点依次连接绘制出来的。
-
不像
LineTo
或PolylineTo
函数,Polyline
函数既不会用到当前位置,也不会去修改它。
PolylineTo
PolylineTo 函数将指定数组的连接点绘制成一系列线段(折线)。
-
API 函数原型:
BOOL PolylineTo(_In_ HDC hdc,_In_ const POINT *lppt,_In_ DWORD cCount );
参数解析:
参数 | 含义 |
---|---|
hdc | 指定设备环境句柄 |
lppt | 一个指向 POINT 结构 的数组的指针(折线的顶点) |
cCount | 【1】 lppt 参数指向的数组中顶点 POINT 结构 的个数 【2】该值必须大于或等于 2 |
返回值:
-
如果函数调用成功,返回值是非 0;
-
如果函数调用失败,返回值是 0。
备注:
-
不像
Polyline
函数,PolylineTo
函数会使用并修改当前位置。 -
绘画时,会使用使用当前画笔,先从当前位置画一条线连接到 lppt 指定的第一个顶点的位置,然后画到下一个顶点,以此类推。
-
绘画完成之后,会将当前位置移动到最后一个顶点的位置。
-
如果该函数绘制了一个封闭的图形,那么该图形不会被填充。
PolyPolyline
PolyPolyline 函数用于同时绘制多条折线。
-
API 函数原型:
BOOL PolyPolyline(_In_ HDC hdc,_In_ const POINT *lppt,_In_ const DWORD *lpdwPolyPoints,_In_ DWORD cCount );
参数解析:
参数 | 含义 |
---|---|
hdc | 指定设备环境句柄 |
lppt | 一个指向 POINT 结构的数组的指针(一系列折线上的顶点) |
lpdwPolyPoints | 一个指向数组的指针,数组中每个元素用于指定 lppt 参数中相应折线的顶点的数量 |
cCount | lpdwPolyPoints 参数指向的数组的元素数量(折线的数量) |
返回值:
-
如果函数调用成功,返回值是非 0;
-
如果函数调用失败,返回值是 0。
备注:
-
该函数绘制的一系类折线都是使用当前画笔完成。
-
该函数绘制的图形并没有填充。
-
该函数既不会用到当前位置,也不会去修改它。
PolyBezier
PolyBezier 函数用于绘制一个或多个贝塞尔曲线。
贝赛尔曲线是一种非常优美的曲线,一条贝赛尔样条由4个定义点定义:两个端点和两个控制点。
- API 函数原型:
BOOL PolyBezier(_In_ HDC hdc,_In_ const POINT *lppt,_In_ DWORD cPoints
);
参数解析:
参数 | 含义 |
---|---|
hdc | 指定设备环境句柄 |
lppt | 1. 一个指向 POINT 结构的数组的指针,该数组包含端点和控制点的坐标 2. 顺序是起点、第一控制点、第二控制点和终点 |
cPoints | 指明 lppt 指向的数组中点的个数 |
返回值:
-
如果函数调用成功,返回值是非 0;
-
如果函数调用失败,返回值是 0。
备注:
-
PolyBezier 函数通过使用由 lppt 参数指定的端点和控制点绘制一条或多条三次贝塞尔曲线。
-
第一条贝塞尔曲线的四个点依次是:起点、第一控制点、第二控制点和终点;随后的每一条贝塞尔曲线则只需给出三个点,因为前一条贝塞尔曲线的终点会被当作后一条贝塞尔曲线的起点,以此类推。
-
绘制一系列相连的贝塞尔曲线时,仅当第一条贝塞尔曲线的第二个控点、第一条贝塞尔曲线的终点(也就是第二条贝塞尔曲线的起点)与第二条贝塞尔曲线的第一个控点是线性关系时(即三点共线时),曲线在连接点处才是平滑的。
enjoy it ~
本文标签: windows编程之GDI绘图
版权声明:本文标题:windows编程之GDI绘图 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1732352267h1533428.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论