C++ DirectX中的ChromaKey

C++ DirectX中的ChromaKey,c++,direct2d,direct3d11,dxgi,chromakey,C++,Direct2d,Direct3d11,Dxgi,Chromakey,我需要用Direct2d实现一些色度键功能 我有一些来自MSDN的代码示例: ComPtr<ID2D1Effect> chromakeyEffect; m_d2dContext->CreateEffect(CLSID_D2D1ChromaKey, &chromakeyEffect); chromakeyEffect->SetInput(0, bitmap); chromaKeyEffect->SetValue(D2D1_CHROMAKEY_PROP_COL

我需要用Direct2d实现一些色度键功能

我有一些来自MSDN的代码示例:

ComPtr<ID2D1Effect> chromakeyEffect;
m_d2dContext->CreateEffect(CLSID_D2D1ChromaKey, &chromakeyEffect);

chromakeyEffect->SetInput(0, bitmap);
chromaKeyEffect->SetValue(D2D1_CHROMAKEY_PROP_COLOR, {0.0f, 1.0f, 0.0f, 0.0f});
chromakeyEffect->SetValue(D2D1_CHROMAKEY_PROP_TOLERANCE, 0.2f);
chromakeyEffect->SetValue(D2D1_CHROMAKEY_PROP_INVERT_ALPHA, false);
chromakeyEffect->SetValue(D2D1_CHROMAKEY_PROP_FEATHER, false);

m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(chromakeyEffect.Get());
m_d2dContext->EndDraw();
然而,我对WinAPI有点陌生。 我们的平台具有ID3D11设备的屈服实例功能,我接收DX11纹理作为输入。 我有两个问题: 1.如何从ID3D11设备获取m_d2dContext? 2.如何从DX11Texture获取ID2D1图像

如何从ID3D11设备获取m_d2dContext? 你不能,至少不能直接

您创建一个D2D工厂,然后在DXGI资源的顶部创建一个渲染目标,该资源反过来来自某些D3D11纹理,因此属于某些D3D11设备。所有这些结合在一起,您可以使用D2D绘制特定的D3D11纹理

如何从DX11Texture获取ID2D1图像? 您的案例的MSDN文档入口点如下:。具体而言,对于D3D纹理到D2D图像场景,建议的路径如下:

同时使用Direct2D和Direct3D有两种主要方法:

[……]

通过使用CreateSharedBitmap从IDXGISurface创建ID2D1Bitmap,可以将Direct3D场景写入位图并使用Direct2D进行渲染