Cara Membuat Sikat Gradien Radial

Untuk membuat kuas gradien radial, gunakan metode ID2DRenderTarget::CreateRadialGradientBrush dan tentukan properti sikat gradien radial dan koleksi stop gradien. Beberapa kelebihan beban memungkinkan Anda menentukan properti kuas. Kode berikut menunjukkan cara membuat sikat gradien radial untuk mengisi lingkaran, dan kuas hitam solid untuk menggambar garis luar lingkaran.

Kode menghasilkan output yang ditunjukkan dalam ilustrasi berikut.

ilustrasi lingkaran yang diisi dengan sikat gradien radial

  1. Mendeklarasikan variabel jenis ID2D1RadialGradientBrush.

        ID2D1RadialGradientBrush *m_pRadialGradientBrush;
    
  2. Buat array struktur D2D1_GRADIENT_STOP untuk dimasukkan ke dalam koleksi stop gradien. Struktur D2D1_GRADIENT_STOP berisi posisi dan warna pemberhentian gradien. Posisi menunjukkan posisi relatif pemberhentian gradien di kuas. Nilai berada dalam rentang [0.0f, 1.0f], seperti yang ditunjukkan dalam kode berikut.

    // 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. Gunakan metode ID2D1RenderTarget::CreateGradientStopCollection untuk membuat koleksi ID2D1GradientStopCollection dari array struktur D2D1_GRADIENT_STOP yang dideklarasikan sebelumnya. Kemudian, Gunakan CreateRadialGradientBrush untuk membuat sikat gradien radial.

    Catatan

    Dimulai dengan Windows 8, Anda dapat menggunakan metode ID2D1DeviceContext::CreateGradientStopCollection untuk membuat koleksi ID2D1GradientStopCollection1 alih-alih metode ID2D1RenderTarget::CreateGradientStopCollection. Antarmuka ini menambahkan gradien warna tinggi dan interpolasi gradien dalam warna lurus atau pramulus. Lihat halaman ID2DDeviceContext::CreateGradientStopCollection untuk informasi selengkapnya.

     

    // 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);
    

Referensi Direct2D