Compartilhar via


Interface ID2D1DCRenderTarget (d2d1.h)

Emite comandos de desenho para um contexto de dispositivo GDI.

Herança

A interface ID2D1DCRenderTarget herda de ID2D1RenderTarget. ID2D1DCRenderTarget também tem estes tipos de membros:

Métodos

A interface ID2D1DCRenderTarget tem esses métodos.

 
ID2D1DCRenderTarget::BindDC

Associa o destino de renderização ao contexto do dispositivo ao qual ele emite comandos de desenho.

Comentários

Criando objetos ID2D1DCRenderTarget

Para criar um ID2D1DCRenderTarget, use o método ID2D1Factory::CreateDCRenderTarget .

Antes de renderizar com o destino de renderização dc, você deve usar seu método BindDC para associá-lo a um DC GDI. Você faz isso sempre que usa um DC diferente ou o tamanho da área que deseja desenhar para as alterações.

Para permitir que o destino de renderização de DC funcione com GDI, defina seu formato de pixel como DXGI_FORMAT_B8G8R8A8_UNORM e seu modo alfa como D2D1_ALPHA_MODE_PREMULTIPLIED ou D2D1_ALPHA_MODE_IGNORE.

Seu aplicativo deve criar destinos de renderização uma vez e mantê-los durante a vida útil do aplicativo ou até que o método EndDraw do destino de renderização retorne o erro D2DERR_RECREATE_TARGET . Ao receber esse erro, você precisa recriar o destino de renderização (e todos os recursos que ele criou).

ID2D1DCRenderTargets, Transformações de GDI e builds de linguagem da direita para a esquerda do Windows

Quando você usa um ID2D1DCRenderTarget, ele renderiza o conteúdo direct2D em um bitmap interno e renderiza o bitmap para o DC com GDI.

É possível que a GDI aplique uma transformação GDI (por meio do método SetWorldTransform ) ou outro efeito ao mesmo DC usado pelo destino de renderização, nesse caso, a GDI transforma o bitmap produzido pelo Direct2D. O uso de uma transformação GDI para transformar o conteúdo do Direct2D tem o potencial de degradar a qualidade visual da saída, pois você está transformando um bitmap para o qual o posicionamento de antialiasing e subpixel já foi calculado.

Por exemplo, suponha que você use o destino de renderização para desenhar uma cena que contenha geometrias e textos suavizados. Se você usar uma transformação GDI para aplicar uma transformação de escala ao DC e dimensionar a cena para que ela seja 10 vezes maior, você verá pixelização e bordas irregulares. (No entanto, se você aplicasse uma transformação semelhante usando o Direct2D, a qualidade visual da cena não seria degradada.)

Em alguns casos, pode não ser óbvio que o GDI está executando processamento adicional que pode degradar a qualidade do conteúdo Direct2D. Por exemplo, em um build da direita para a esquerda (RTL) do Windows, o conteúdo renderizado por um ID2D1DCRenderTarget pode ser invertido horizontalmente quando a GDI o copia para seu destino. Se o conteúdo é realmente invertido depende das configurações atuais do DC.

Dependendo do tipo de conteúdo que está sendo renderizado, talvez você queira impedir a inversão. Se o conteúdo direct2D incluir texto ClearType, essa inversão prejudicará a qualidade do texto.

Você pode controlar o comportamento de renderização rtl usando a função SetLayout GDI. Para evitar o espelhamento, chame a função SetLayout GDI e especifique LAYOUT_BITMAPORIENTATIONPRESERVED como o único valor para o segundo parâmetro (não combine-o com LAYOUT_RTL), conforme mostrado no exemplo a seguir:

SetLayout(m_hwnd, LAYOUT_BITMAPORIENTATIONPRESERVED);

Exemplos

O código a seguir cria um destino de renderização dc.

// Create a DC render target.
D2D1_RENDER_TARGET_PROPERTIES props = D2D1::RenderTargetProperties(
    D2D1_RENDER_TARGET_TYPE_DEFAULT,
    D2D1::PixelFormat(
        DXGI_FORMAT_B8G8R8A8_UNORM,
        D2D1_ALPHA_MODE_IGNORE),
    0,
    0,
    D2D1_RENDER_TARGET_USAGE_NONE,
    D2D1_FEATURE_LEVEL_DEFAULT
    );

hr = m_pD2DFactory->CreateDCRenderTarget(&props, &m_pDCRT);

No código anterior, m_pD2DFactory é um ponteiro para um ID2D1Factory e m_pDCRT é um ponteiro para um ID2D1DCRenderTarget.

O próximo exemplo de código associa um DC ao ID2D1DCRenderTarget.

HRESULT DemoApp::OnRender(const PAINTSTRUCT &ps)
{

// Get the dimensions of the client drawing area.
GetClientRect(m_hwnd, &rc);

// Bind the DC to the DC render target.
hr = m_pDCRT->BindDC(ps.hdc, &rc);

Para obter mais informações sobre como usar o GDI com Direct2D, consulte a Visão geral da interoperação direct2D e GDI.

Requisitos

   
Cliente mínimo com suporte Windows 7, Windows Vista com SP2 e Atualização de Plataforma para Windows Vista [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2008 R2, Windows Server 2008 com SP2 e Atualização de Plataforma para Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho d2d1.h

Confira também

Visão geral da interoperação direct2D e GDI

ID2D1RenderTarget