ID2D1PathGeometry 接口简介:
ID2D1PathGeometry 接口是 Direct2D 中表示路径几何图形的接口。路径几何图形是由线段和曲线组成的路径,可以通过该接口定义并在渲染目标上绘制。
头文件:
#include <d2d1.h>
声明:
interface ID2D1PathGeometry : public ID2D1Geometry
{
STDMETHOD(Open)(
_Outptr_ ID2D1GeometrySink **geometrySink
) PURE;
STDMETHOD(Stream)(
_In_ ID2D1GeometrySink *geometrySink
) CONST PURE;
};
主要方法:
1. Open:
- 描述:打开路径几何图形以便定义其形状。
- 参数:
- geometrySink: 用于存储 ID2D1GeometrySink 接口的指针,用于定义路径的形状。
- 返回值:HRESULT。
2. Stream:
- 描述:将路径几何图形的数据流传递给指定的 ID2D1GeometrySink。
- 参数:
- geometrySink: 接收路径数据流的 ID2D1GeometrySink 接口。
- 返回值:HRESULT。
示例用法:
// 创建路径几何图形
ID2D1PathGeometry* pathGeometry = nullptr;
HRESULT hr = factory->CreatePathGeometry(&pathGeometry);
if (SUCCEEDED(hr))
{
// 打开路径几何图形以定义其形状
ID2D1GeometrySink* geometrySink = nullptr;
hr = pathGeometry->Open(&geometrySink);
if (SUCCEEDED(hr))
{
// 开始定义路径
geometrySink->BeginFigure(D2D1::Point2F(10.0f, 10.0f), D2D1_FIGURE_BEGIN_FILLED);
// 添加线段
geometrySink->AddLine(D2D1::Point2F(100.0f, 10.0f));
// 添加二次贝塞尔曲线
D2D1_QUADRATIC_BEZIER_SEGMENT bezierSegment = {
D2D1::Point2F(150.0f, 100.0f), // 控制点
D2D1::Point2F(200.0f, 10.0f) // 终点
};
geometrySink->AddQuadraticBezier(bezierSegment);
// 结束定义路径
geometrySink->EndFigure(D2D1_FIGURE_END_CLOSED);
// 关闭路径几何图形
hr = geometrySink->Close();
// 释放 ID2D1GeometrySink 接口
geometrySink->Release();
}
// 在渲染目标上使用路径几何图形绘制图形
if (SUCCEEDED(hr))
{
renderTarget->DrawGeometry(pathGeometry, /* 可选的笔刷和变换参数 */);
}
// 释放资源
pathGeometry->Release();
}
在上述代码中,factory 是 ID2D1Factory 接口的实例,而 renderTarget 是 ID2D1RenderTarget 接口的实例。该示例演示了如何创建路径几何图形并在路径上定义形状,然后在渲染目标上使用路径几何图形绘制图形。路径几何图形的形状可以通过添加线段、曲线等来进行定义。
转载请注明出处:http://www.zyzy.cn/article/detail/25271/Win32 API/D2d1.h/ID2D1PathGeometry