如何为IWICBitmap创建ID2D1DeviceContext? (对于C ++中的Metro应用程序)

时间:2012-07-27 05:30:25

标签: c++ windows-8 microsoft-metro direct2d

我可以使用以下代码为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);

但是如果我想将ID2D1Effect应用于这个位图,我只有拥有ID2D1DeviceContext才能这样做。如何获取IWICBitmap的ID2D1DeviceContext?

1 个答案:

答案 0 :(得分:4)

创建渲染目标后,需要对ID2D1DeviceContext进行QI。 e.g。

pWicRenderTarget->QueryInterface(
                      __uuidof(ID2D1DeviceContext), 
                      reinterpret_cast<void**>(&pDC)
                      );

请记住,QI也会增加引用次数。