2017-02-10 47 views
1

我想在C++中打開一個位圖文件,改變它,然後創建另一個位圖文件。問題是當我嘗試使用ofstream輸出位圖文件時,即使不更改文件的任何字節,它也有一個奇怪的輸出。用ofstream創建一個位圖文件有一個奇怪的輸出

#include <fstream> 
using namespace std; 

int main() 
{ 
    ifstream fin ("6.bmp", std::ios::binary); 
    ofstream fout ("output.bmp"); 
    for (int i = 0; i < 1920*1080*3 + 54; i++) 
     fout.put(fin.get()); 
} 

1920 * 1080是圖片大小,* 3是紅色,綠色,藍色。我知道一個位圖文件有一個54字節的標題,所以我認爲在6.bmp中有正確的1920 * 1080 * 3 + 54字節;

當輸入爲:input

然後我得到this輸出。

(ⅰ調整大小既圖片上傳他們,但他們都是1920 * 1080)

我編譯該代碼使用g ++在windows 8.1。我不想使用位圖庫。

+0

*並且我不想使用位圖庫* - 您實際上認爲可以用一行'fout'循環來調整位圖的大小? – PaulMcKenzie

+0

你是否用'DIR'檢查文件的大小,因爲你對長度的假設可能是錯誤的 - 由於填充和其他的東西。 –

+0

什麼是輸入和輸出文件的實際大小? STL流對於二進制文件不是一件好事,它通常以不同的方式表現出'\ 0'和'\ n'。 – ilotXXI

回答

0

在Windows下,fout也必須以二進制模式打開,否則0x0d字節將在每個0x0a字節前自動插入,導致輸出文件損壞。

相關問題