ID2D1RadialGradientBrush 接口是 Direct2D 中表示径向渐变画刷的接口。径向渐变画刷以两个不同的圆为基础,其中一个是渐变的起始圆,另一个是渐变的结束圆。以下是该接口的一些基本信息:

ID2D1RadialGradientBrush 接口简介:

ID2D1RadialGradientBrush 接口是 Direct2D 中表示径向渐变画刷的接口。径向渐变画刷以两个不同的圆为基础,其中一个是渐变的起始圆,另一个是渐变的结束圆,使渲染目标上的图形从起始圆渐变到结束圆。

头文件:
#include <d2d1.h>

声明:
interface ID2D1RadialGradientBrush : public ID2D1Brush
{
    STDMETHOD_(void, SetCenter)(
        D2D1_POINT_2F center
        ) PURE;

    STDMETHOD_(void, SetGradientOriginOffset)(
        D2D1_POINT_2F gradientOriginOffset
        ) PURE;

    STDMETHOD_(void, SetRadiusX)(
        FLOAT radiusX
        ) PURE;

    STDMETHOD_(void, SetRadiusY)(
        FLOAT radiusY
        ) PURE;

    STDMETHOD_(D2D1_POINT_2F, GetCenter)(
        ) CONST PURE;

    STDMETHOD_(D2D1_POINT_2F, GetGradientOriginOffset)(
        ) CONST PURE;

    STDMETHOD_(FLOAT, GetRadiusX)(
        ) CONST PURE;

    STDMETHOD_(FLOAT, GetRadiusY)(
        ) CONST PURE;
};

主要方法:

1. SetCenter:
   - 描述:设置径向渐变的中心点坐标。
   - 参数:
     - center: 渐变的中心点坐标。
   - 返回值:无。

2. SetGradientOriginOffset:
   - 描述:设置渐变的起始点相对于渐变中心的偏移量。
   - 参数:
     - gradientOriginOffset: 渐变的起始点相对于渐变中心的偏移量。
   - 返回值:无。

3. SetRadiusX:
   - 描述:设置渐变的 X 轴半径。
   - 参数:
     - radiusX: 渐变的 X 轴半径。
   - 返回值:无。

4. SetRadiusY:
   - 描述:设置渐变的 Y 轴半径。
   - 参数:
     - radiusY: 渐变的 Y 轴半径。
   - 返回值:无。

5. GetCenter:
   - 描述:获取径向渐变的中心点坐标。
   - 参数:无。
   - 返回值:返回 D2D1_POINT_2F 结构,表示渐变的中心点坐标。

6. GetGradientOriginOffset:
   - 描述:获取渐变的起始点相对于渐变中心的偏移量。
   - 参数:无。
   - 返回值:返回 D2D1_POINT_2F 结构,表示渐变的起始点相对于渐变中心的偏移量。

7. GetRadiusX:
   - 描述:获取渐变的 X 轴半径。
   - 参数:无。
   - 返回值:返回 FLOAT,表示渐变的 X 轴半径。

8. GetRadiusY:
   - 描述:获取渐变的 Y 轴半径。
   - 参数:无。
   - 返回值:返回 FLOAT,表示渐变的 Y 轴半径。

示例用法:
// 创建径向渐变画刷
ID2D1RadialGradientBrush* radialGradientBrush = nullptr;
D2D1_GRADIENT_STOP gradientStops[] = {
    { 0.0f, D2D1::ColorF(D2D1::ColorF::Red) },
    { 1.0f, D2D1::ColorF(D2D1::ColorF::Blue) }
};

HRESULT hr = renderTarget->CreateGradientStopCollection(
    gradientStops,
    ARRAYSIZE(gradientStops),
    &gradientStopCollection
);

if (SUCCEEDED(hr))
{
    D2D1_POINT_2F center = D2D1::Point2F(100.0f, 100.0f);
    D2D1_POINT_2F gradientOriginOffset = D2D1::Point2F(10.0f, 10.0f);
    FLOAT radiusX = 50.0f;
    FLOAT radiusY = 30.0f;

    hr = renderTarget->CreateRadialGradientBrush(
        D2D1::RadialGradientBrushProperties(
            center,
            gradientOriginOffset,
            radiusX,
            radiusY
        ),
        gradientStopCollection,
        &radialGradientBrush
    );
}

// 在渲染目标上使用径向渐变画刷绘制图形
if (SUCCEEDED(hr))
{
    renderTarget->FillEllipse(
        D2D1::Ellipse(D2D1::Point2F(100.0f, 100.0f), 50.0f, 30.0f),
        radialGradientBrush
    );
}

// 释放资源
if (radialGradientBrush)
{
    radialGradientBrush->Release();
}

if (gradientStopCollection)
{
    gradientStopCollection->Release();
}

在上述代码中,renderTarget 是 ID2D1RenderTarget 接口的实例,而 gradientStopCollection 是 ID2D1GradientStopCollection 接口的实例。该示例演示了如何创建径向渐变画刷并在渲染目标上使用该画刷绘制椭圆。径向渐变画刷的特征由中心点、渐变起始点相对于中心的偏移、X 轴和 Y 轴的半径以及颜色渐变停止定义。


转载请注明出处:http://www.zyzy.cn/article/detail/25272/Win32 API/D2d1.h/ID2D1RadialGradientBrush