다음을 통해 공유


방사형 그라데이션 브러시를 만드는 방법

방사형 그라데이션 브러시를 만들려면 ID2DRenderTarget::CreateRadialGradientBrush 메서드를 사용하고 방사형 그라데이션 브러시 속성 및 그라데이션 중지 컬렉션을 지정합니다. 일부 오버로드를 사용하면 브러시 속성을 지정할 수 있습니다. 다음 코드는 원을 채우는 방사형 그라데이션 브러시와 원의 윤곽선을 그리는 검은색 단색 브러시를 만드는 방법을 보여줍니다.

이 코드는 다음 그림과 같은 출력을 생성합니다.

방사형 그라데이션 브러시로 채워진 원의 그림

  1. ID2D1RadialGradientBrush 형식의 변수를 선언합니다.

        ID2D1RadialGradientBrush *m_pRadialGradientBrush;
    
  2. 그라데이션 중지 컬렉션에 넣을 D2D1_GRADIENT_STOP 구조체의 배열을 만듭니다. D2D1_GRADIENT_STOP 구조체에는 그라데이션 중지점의 위치와 색이 포함됩니다. 이 위치는 브러시에서 그라데이션 중지점의 상대 위치를 나타냅니다. 이 값은 다음 코드와 같이 [0.0f, 1.0f] 범위 이내입니다.

    // Create an array of gradient stops to put in the gradient stop
    // collection that will be used in the gradient brush.
    ID2D1GradientStopCollection *pGradientStops = NULL;
    
    D2D1_GRADIENT_STOP gradientStops[2];
    gradientStops[0].color = D2D1::ColorF(D2D1::ColorF::Yellow, 1);
    gradientStops[0].position = 0.0f;
    gradientStops[1].color = D2D1::ColorF(D2D1::ColorF::ForestGreen, 1);
    gradientStops[1].position = 1.0f;
    // Create the ID2D1GradientStopCollection from a previously
    // declared array of D2D1_GRADIENT_STOP structs.
    hr = m_pRenderTarget->CreateGradientStopCollection(
        gradientStops,
        2,
        D2D1_GAMMA_2_2,
        D2D1_EXTEND_MODE_CLAMP,
        &pGradientStops
        );
    
  3. ID2D1RenderTarget::CreateGradientStopCollection 메서드를 사용하여 이전에 선언된 D2D1_GRADIENT_STOP 구조체 배열에서 ID2D1GradientStopCollection 컬렉션을 생성합니다. 그런 다음 CreateRadialGradientBrush를 사용하여 방사형 그라데이션 브러시를 만듭니다.

    참고 항목

    Windows 8부터는 ID2D1RenderTarget::CreateGradientStopCollection 메서드 대신 ID2D1DeviceContext::CreateGradientStopCollection 메서드를 사용하여 ID2D1GradientStopCollection1 컬렉션을 생성할 수 있습니다. 이 인터페이스는 하이 컬러 그라데이션과 직선 또는 사전 곱셈된 색의 그라데이션 보간을 추가합니다. 자세한 내용은 ID2DDeviceContext::CreateGradientStopCollection 페이지를 참조하세요.

     

    // The center of the gradient is in the center of the box.
    // The gradient origin offset was set to zero(0, 0) or center in this case.
    if (SUCCEEDED(hr))
    {
        hr = m_pRenderTarget->CreateRadialGradientBrush(
            D2D1::RadialGradientBrushProperties(
                D2D1::Point2F(75, 75),
                D2D1::Point2F(0, 0),
                75,
                75),
            pGradientStops,
            &m_pRadialGradientBrush
            );
    }
    
    m_pRenderTarget->FillEllipse(ellipse, m_pRadialGradientBrush);
    m_pRenderTarget->DrawEllipse(ellipse, m_pBlackBrush, 1, NULL);
    

Direct2D 참조