在 Win32 API 的 Direct2D 中,GradientStop 结构体用于定义渐变的颜色和位置。该结构体通常用于创建渐变画刷(ID2D1GradientStopCollection)。以下是 GradientStop 结构体的定义:
typedef struct D2D1_GRADIENT_STOP {
  FLOAT            position;
  D2D1_COLOR_F     color;
} D2D1_GRADIENT_STOP;

  •  position: 定义渐变停止的位置,是一个浮点数,表示从 0.0 到 1.0 的范围。0.0 表示渐变的起始点,1.0 表示渐变的结束点。

  •  color: 定义渐变停止的颜色,是一个 D2D1_COLOR_F 结构体,表示颜色的 RGBA 值。


使用 GradientStop 结构体,你可以指定渐变中每个停止点的位置和颜色,从而创建渐变画刷。以下是一个简单的示例:
ID2D1RenderTarget* pRenderTarget = /* 获取RenderTarget的方式 */;

// 定义渐变停止
D2D1_GRADIENT_STOP gradientStops[] = {
    { 0.0f, D2D1::ColorF(D2D1::ColorF::Red) },
    { 0.5f, D2D1::ColorF(D2D1::ColorF::Yellow) },
    { 1.0f, D2D1::ColorF(D2D1::ColorF::Green) }
};

// 创建渐变停止集合
ID2D1GradientStopCollection* pGradientStops = NULL;
pRenderTarget->CreateGradientStopCollection(
    gradientStops,
    ARRAYSIZE(gradientStops),
    &pGradientStops
);

// 使用渐变停止集合创建线性渐变画刷
ID2D1LinearGradientBrush* pLinearGradientBrush = NULL;
pRenderTarget->CreateLinearGradientBrush(
    D2D1::LinearGradientBrushProperties(D2D1::Point2F(0.0f, 0.0f), D2D1::Point2F(200.0f, 0.0f)),
    D2D1::BrushProperties(),
    pGradientStops,
    &pLinearGradientBrush
);

// 使用渐变画刷绘制图形
pRenderTarget->BeginDraw();
pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White));
pRenderTarget->DrawRectangle(D2D1::RectF(10.0f, 10.0f, 100.0f, 100.0f), pLinearGradientBrush);
pRenderTarget->EndDraw();

// 释放资源
pGradientStops->Release();
pLinearGradientBrush->Release();

在这个示例中,gradientStops 数组定义了三个渐变停止点,分别对应红色、黄色和绿色。通过这些渐变停止点,创建了一个线性渐变画刷,并用它绘制了一个矩形。


转载请注明出处:http://www.zyzy.cn/article/detail/25446/Win32 API/D2d1helper.h/GradientStop