OpenCV Mat到Id2d1Bitmap

时间:2018-07-19 04:34:59

标签: opencv bitmap render directx-11

我必须将opencv Mat渲染为使用DirectX11。

D2D1_BITMAP_PROPERTIES1 bitmapProperties = D2D1::BitmapProperties1(
            D2D1_BITMAP_OPTIONS_TARGET | D2D1_BITMAP_OPTIONS_CANNOT_DRAW,
            D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_IGNORE),
            96,
            96
        );
D2D1_SIZE_U s = D2D1::SizeU(640, 480);
hr = m_d2DeviceContext->CreateBitmap(s, bitmapProp, &m_streamBitmap);

我必须将opencv矩阵复制到m_streamBitmap。 pImage是具有3个通道的彩色图像。

m_streamBitmap->CopyFromMemory(NULL, reinterpret_cast<BYTE*>(pImage.data),pImage.cols()*3);

这会导致图像失真。 谁能指导我这个。

预先感谢..

1 个答案:

答案 0 :(得分:0)

您的ID[]调用正在将三字节颜色位图复制到四字节颜色位图。 CopyFromMemory不进行格式转换,这意味着源位图和目标位图的格式必须完全匹配。另外,DXGI不支持三字节颜色格式,因此即使未使用第四位,源位图也必须修改为每个像素四个字节。如果您无法更改源位图的格式以匹配Direct2D位图,则需要编写一个转换函数,该函数会将位图元素扩展到四个字节。