ID2D1DeviceContext::SetTarget 方法 (d2d1_1.h)
Direct2D 裝置內容現在將轉譯的點陣圖或命令清單。
語法
void SetTarget(
[in, optional] ID2D1Image *image
);
參數
[in, optional] image
類型: ID2D1Image*
Direct2D 裝置內容將呈現的介面或命令清單。
傳回值
無
備註
您可以隨時變更目標,包括內容正在繪製時。
目標可以是使用 D2D1_BITMAP_OPTIONS_TARGET 旗標建立的點陣圖,也可以是命令清單。 其他類型的影像無法設定為目標。 例如,您無法將效果的輸出設定為目標。 如果目標無效,內容將會進入 D2DERR_INVALID_TARGET 錯誤狀態。
您無法同時使用 SetTarget 從多個裝置內容轉譯至位圖/命令清單。 如果影像已在 BeginDraw EndDraw/ 時間範圍內的裝置內容上設定,則會被視為「正在轉譯」。 如果嘗試透過多個裝置內容轉譯至影像,則第一次之後的所有後續裝置內容都會進入錯誤狀態。
想要將影像附加至第二個裝置內容的來電者,應該先在第一個裝置內容上呼叫 EndDraw 。
以下是正確呼叫順序的範例。
pDC1->BeginDraw();
pDC1->SetTarget(pImage);
// …
pDC1->EndDraw();
pDC2->BeginDraw();
pDC2->SetTarget(pImage);
// …
pDC2->EndDraw();
以下是不正確的呼叫順序範例。
pDC1->BeginDraw();
pDC2->BeginDraw();
pDC1->SetTarget(pImage);
// ...
pDC1->SetTarget(NULL);
pDC2->SetTarget(pImage); // This call is invalid, even though pImage is no longer set on pDC1.
// ...
pDC1->EndDraw(); // This EndDraw SUCCEEDs.
pDC2->EndDraw(); // This EndDraw FAILs
一次將位圖系結為多個轉譯目標的目標位圖是可接受的。 執行此動作的應用程式必須與 Flush 或 EndDraw 正確同步處理轉譯。
您可以隨時變更目標,包括內容正在繪製時。
您可以將目標設定為 NULL,在此情況下,繪圖呼叫會將裝置內容置於具有D2DERR_WRONG_STATE的錯誤狀態。 使用 NULL 目標呼叫 SetTarget 並不會將原始目標位圖還原到裝置內容。
如果裝置內容具有未處理的 HDC,內容將會進入 D2DERR_WRONG_STATE 錯誤狀態。 目標將不會變更。
如果點圖和裝置內容不在相同的資源網域中,內容將會進入 \ 錯誤狀態。 目標將不會變更。
ID2D1RenderTarget::GetPixelSize 會傳回目前目標位圖的大小 (或 0、0) 如果沒有位圖系結) 。 ID2D1RenderTarget::GetSize 會傳回以轉譯目標 DPI 縮放之目前點陣圖的圖元大小。 SetTarget 不會影響轉譯目標的 DPI。
ID2D1RenderTarget::GetPixelFormat 會傳回目前目標位圖的圖元格式 (或 DXGI_FORMAT_UNKNOWN,如果沒有任何 ) ,D2D1_ALPHA_MODE_UNKNOWN 。
ID2D1Bitmap::CopyFromRenderTarget 會從目前系結的目標位圖複製。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 適用於 Windows 7 的 Windows 8 和平臺更新 [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | 適用於 Windows Server 2008 R2 的 Windows Server 2012 和平臺更新 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | d2d1_1.h |
Dll | D2d1.dll |