如何在不保存/加载文件的情况下从ID3D11Texture2D创建PNG格式的字节数组?

时间:2019-05-31 15:27:14

标签: c++ png directx-11 wic

我有一个ID3D11Texture2D。最终目标是获取图像并将其作为base64编码的字符串嵌入到html中(要求基于我无法控制的现有功能)。我可以通过使用DirectX::SaveWICTextureToFile将纹理保存到文件中,将纹理作为字节数组加载,然后在base64中对数组进行编码来实现此目的,但我想尽可能地将其保存到文件中。

理想情况下,会有某种SaveWICTextureToMemory函数可以将容器格式作为参数,但是到目前为止,我还没有找到任何处理该格式的方法。我已经在WICTextureLoader包中签出了CreateWICTextureFromMemory和其他函数,但没有找到我想要的东西(也许我错过了)。弄清楚SaveWICTextureToFile必须生成一个字节数组才能写入文件,我试图从本质上解压缩该函数并剥离该文件的文件创建元素,但是决定可能有一个更简单的解决方案,将我带到这里。

我没有太多代码要看,因为我只列出了许多关键功能,但这通常是这些东西需要存在的地方:

HRESULT ExportImages::GetAngleEncodedString(std::string& encoded, const DirectX::XMMATRIX& projectionMatrix, float radians) const
{
   // Draws geometry to m_Texture2D
   DrawAngle(projectionMatrix, radians);

   unsigned const char* pngBytes = GetPNGBytes(m_Texture2D);

   try
   {
      encoded = Base64Encode(pngBytes);
   }
   catch (...)
   {
      // TODO don't catch all, add resolution
      return HRESULT(-1);
   }

   return S_OK;
}

unsigned const char* ExportImages::GetPNGBytes(ID3D11Texture2D* texture) const
{
   // ???
}

0 个答案:

没有答案