DirectX11 CreateWICTextureFromMemory使用PNG

我目前使用CreateWICTextureFromFile加载纹理,但是我想多一点控制它,并且我想将图像以字节的forms存储在资源加载器中。 下面是两组testing代码,返回两个单独的结果,我正在寻找任何洞察到一个可能的解决scheme。

ID3D11ShaderResourceView* srv; std::basic_ifstream<unsigned char> file("image.png", std::ios::binary); file.seekg(0,std::ios::end); int length = file.tellg(); file.seekg(0,std::ios::beg); unsigned char* buffer = new unsigned char[length]; file.read(&buffer[0],length); file.close(); HRESULT hr; hr = DirectX::CreateWICTextureFromMemory(_D3D->GetDevice(), _D3D->GetDeviceContext(), &buffer[0], sizeof(buffer), nullptr, &srv, NULL); 

作为上述代码的返回,我找不到组件。

 std::ifstream file; ID3D11ShaderResourceView* srv; file.open("image.png", std::ios::binary); file.seekg(0,std::ios::end); int length = file.tellg(); file.seekg(0,std::ios::beg); std::vector<char> buffer(length); file.read(&buffer[0],length); file.close(); HRESULT hr; hr = DirectX::CreateWICTextureFromMemory(_D3D->GetDevice(), _D3D->GetDeviceContext(), (const uint8_t*)&buffer[0], sizeof(buffer), nullptr, &srv, NULL); 

上面的代码返回的图像格式是未知的。

我很清楚在这里做错了什么,不胜感激。 试图find任何东西甚至在stackoverflow类似,谷歌无济于事。

希望有人试图做同样的事情会find这个解决scheme。

下面是我用来解决这个问题的代码。

 std::basic_ifstream<unsigned char> file("image.png", std::ios::binary); if (file.is_open()) { file.seekg(0,std::ios::end); int length = file.tellg(); file.seekg(0,std::ios::beg); unsigned char* buffer = new unsigned char[length]; file.read(&buffer[0],length); file.close(); HRESULT hr; hr = DirectX::CreateWICTextureFromMemory(_D3D->GetDevice(), _D3D->GetDeviceContext(), &buffer[0], (size_t)length, nullptr, &srv, NULL); } 

CreateWICTextureFromMemory的重要变化是(size_t)length

这确实是一个愚蠢的错误。