Antarmuka ID2D1DCRenderTarget (d2d1.h)

Masalah saat menggambar perintah ke konteks perangkat GDI.

Warisan

Antarmuka ID2D1DCRenderTarget mewarisi dari ID2D1RenderTarget. ID2D1DCRenderTarget juga memiliki jenis anggota berikut:

Metode

Antarmuka ID2D1DCRenderTarget memiliki metode ini.

 
ID2D1DCRenderTarget::BindDC

Mengikat target render ke konteks perangkat yang mengeluarkan perintah gambar.

Keterangan

Membuat Objek ID2D1DCRenderTarget

Untuk membuat ID2D1DCRenderTarget, gunakan metode ID2D1Factory::CreateDCRenderTarget .

Sebelum Anda dapat merender dengan target render DC, Anda harus menggunakan metode BindDC-nya untuk mengaitkannya dengan GDI DC. Anda melakukan ini setiap kali Anda menggunakan DC yang berbeda, atau ukuran area yang ingin Anda gambar untuk perubahan.

Untuk mengaktifkan target render DC agar berfungsi dengan GDI, atur format pikselnya ke DXGI_FORMAT_B8G8R8A8_UNORM dan mode alfanya ke D2D1_ALPHA_MODE_PREMULTIPLIED atau D2D1_ALPHA_MODE_IGNORE.

Aplikasi Anda harus membuat target render sekali dan menahannya selama masa pakai aplikasi atau sampai metode EndDraw target render mengembalikan kesalahan D2DERR_RECREATE_TARGET . Ketika Anda menerima kesalahan ini, Anda perlu membuat ulang target render (dan sumber daya apa pun yang dibuatnya).

ID2D1DCRenderTargets, Transformasi GDI, dan Build Bahasa Kanan-ke-Kiri Windows

Saat Anda menggunakan ID2D1DCRenderTarget, id2D1DCRenderTarget merender konten Direct2D ke bitmap internal, lalu merender bitmap ke DC dengan GDI.

GDI dapat menerapkan transformasi GDI (melalui metode SetWorldTransform ) atau efek lain ke DC yang sama yang digunakan oleh target render, dalam hal ini GDI mengubah bitmap yang dihasilkan oleh Direct2D. Menggunakan transformasi GDI untuk mengubah konten Direct2D berpotensi menurunkan kualitas visual output, karena Anda mengubah bitmap yang posisi antialias dan subpikselnya telah dihitung.

Misalnya, Anda menggunakan target render untuk menggambar adegan yang berisi geometri dan teks yang diantisipasi. Jika Anda menggunakan transformasi GDI untuk menerapkan transformasi skala ke DC dan menskalakan adegan sehingga 10 kali lebih besar, Anda akan melihat pikselisasi dan tepi berjatuhan. (Namun, jika Anda menerapkan transformasi serupa menggunakan Direct2D, kualitas visual adegan tidak akan terdegradasi.)

Dalam beberapa kasus, mungkin tidak jelas bahwa GDI melakukan pemrosesan tambahan yang mungkin menurunkan kualitas konten Direct2D. Misalnya, pada build Windows kanan-ke-kiri (RTL), konten yang dirender oleh ID2D1DCRenderTarget mungkin terbalik secara horizontal ketika GDI menyalinnya ke tujuannya. Apakah konten benar-benar terbalik tergantung pada pengaturan DC saat ini.

Bergantung pada jenis konten yang dirender, Anda mungkin ingin mencegah inversi. Jika konten Direct2D menyertakan teks ClearType, inversi ini akan menurunkan kualitas teks.

Anda dapat mengontrol perilaku penyajian RTL dengan menggunakan fungsi SetLayout GDI. Untuk mencegah pencerminan, panggil fungsi SetLayout GDI dan tentukan LAYOUT_BITMAPORIENTATIONPRESERVED sebagai satu-satunya nilai untuk parameter kedua (jangan gabungkan dengan LAYOUT_RTL), seperti yang ditunjukkan dalam contoh berikut:

SetLayout(m_hwnd, LAYOUT_BITMAPORIENTATIONPRESERVED);

Contoh

Kode berikut membuat target render 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);

Dalam kode sebelumnya, m_pD2DFactory adalah penunjuk ke ID2D1Factory, dan m_pDCRT adalah penunjuk ke ID2D1DCRenderTarget.

Contoh kode berikutnya mengikat DC ke 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);

Untuk informasi selengkapnya tentang menggunakan GDI dengan Direct2D, lihat Gambaran Umum Interoperabilitas Direct2D dan GDI.

Persyaratan

   
Klien minimum yang didukung Windows 7, Windows Vista dengan SP2 dan Pembaruan Platform untuk Windows Vista [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2008 R2, Windows Server 2008 dengan SP2 dan Pembaruan Platform untuk Windows Server 2008 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header d2d1.h

Lihat juga

Gambaran Umum Interoperasi Direct2D dan GDI

ID2D1RenderTarget