2012-12-19 90 views
2

我目前已經使用CreateWICTextureFromFile加載了紋理,但是我想稍微控制一下它,並且我想將圖像以字節的形式存儲在資源加載器中。以下是兩組測試代碼,它們返回兩個單獨的結果,我正在尋找可能的解決方案的任何見解。DirectX11 CreateWICTextureFromMemory使用PNG

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("../Assets/Textures/osg.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); 

上述代碼返回圖像格式未知。

我很清楚在這裏做錯了什麼,任何幫助,非常感謝。試圖找到任何甚至類似的在stackoverflow和谷歌無濟於事。

+0

找不到哪個組件? – zdd

回答

3

希望有人試圖做同樣的事情會找到這個解決方案。

下面是我用來解決這個問題的代碼。

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重要的變化這確實是一個愚蠢的錯誤。