2014-09-20 41 views
3

我有一個IStream,我知道它包含一個PNG文件,但我不能像正常的I/O流寫入它的內容到文件我不知道我做錯了什麼,或者我應該在文件IStream上做不同的事情。如何轉儲(寫入)IStream的內容到文件中(圖片)

IStream *imageStream; 
    std::wstring imageName; 
    packager.ReadPackage(imageStream, &imageName);  

    std::ofstream test("mypic.png"); 
    test<< imageStream; 
+0

您需要使用的圖像數據的二進制寫作方法。 '<<'會在某些系統中破壞文件。試試'std :: ofstream test(「mypic.png」,std :: ios :: binary); test.write(...);'我不知道IStream()如何工作來填充空白。 – Galik 2014-09-20 00:41:19

回答

4

基於你給這裏的IStream參考一些未經測試代碼應該大致你想要什麼:

void output_image(IStream* imageStream, const std::string& file_name) 
{ 
    std::ofstream ofs(file_name, std::ios::binary); // binary mode!! 

    char buffer[1024]; // temporary transfer buffer 

    ULONG pcbRead; // number of bytes actually read 

    // keep going as long as read was successful and we have data to write 
    while(imageStream->Read(buffer, sizeof(buffer), &pcbRead) == S_OK && pcbRead > 0) 
    { 
     ofs.write(buffer, pcbRead); 
    } 

    ofs.close(); 
}