abi*_*bix 3 c++ direct2d microsoft-metro windows-8
我可以使用以下代码为 IWICBitmap 创建 ID2D1RenderTarget...
D2D1_FACTORY_OPTIONS options;
ZeroMemory(&options, sizeof(D2D1_FACTORY_OPTIONS));
#if defined(_DEBUG)
// If the project is in a debug build, enable Direct2D debugging via SDK Layers
options.debugLevel = D2D1_DEBUG_LEVEL_INFORMATION;
#endif
ThrowIfFailed(D2D1CreateFactory(
D2D1_FACTORY_TYPE_SINGLE_THREADED,
__uuidof(ID2D1Factory1),
&options,
&m_d2dFactory
));
D2D1_RENDER_TARGET_PROPERTIES props;
props = D2D1::RenderTargetProperties();
m_d2dFactory->CreateWicBitmapRenderTarget(m_pTheBitmap.Get(), &props, &m_target);
Run Code Online (Sandbox Code Playgroud)
但如果我想将 ID2D1Effect 应用于此位图,只有当我有 ID2D1DeviceContext 时才可以这样做。如何获取 IWICBitmap 的 ID2D1DeviceContext?
创建渲染目标后,您需要 QI 到 ID2D1DeviceContext。例如
pWicRenderTarget->QueryInterface(
__uuidof(ID2D1DeviceContext),
reinterpret_cast<void**>(&pDC)
);
Run Code Online (Sandbox Code Playgroud)
请记住,QI 也会增加引用计数。