2017-10-19 108 views
1

我想在一個給定的係數調整位圖圖像C編寫一個程序,當我使用fwrite()一個循環中這樣做:fwrite如何工作?

// Go through each pixel of input bitmap 
for (int y = 0; y < inWidth; y++) 
{ 
    fread(pixel, sizeof(RGBTRIPLE), 1, inBMP); 

    // Write each pixel to output bitmap (factor) times 
    for (int z = 0; z < factor; z++) 
    { 
     fwrite(pixel, sizeof(RGBTRIPLE), 1, outBMP); 
    } 
} 

一切工作:

Input BitmapOutput Bitmap

但是當我使用fwrite()沒有環:

// Go through each pixel of input bitmap 
for (int y = 0; y < inWidth; y++) 
{ 
    fread(pixel, sizeof(RGBTRIPLE), 1, inBMP); 

    // Write each pixel to output bitmap (factor) times 
    fwrite(pixel, sizeof(RGBTRIPLE), factor, outBMP); 
} 

我得到這個:

Output Bitmap

爲什麼會發生呢?

+0

因爲在頭部你有相同的圖像大小,但身體有更多的信息 –

+2

在你的第二種情況下,你只讀1'RGBTRIPLE',但你正在寫'因素''RGBTRIPLE's – MFisherKDX

+0

是這[有用](https://stackoverflow.com/questions/11569217/how-to-resize-a-bitmap)。 –

回答

1

問題是第三個參數count,指示ptr指向的數組中有多少個元素,而不是應寫入ptr指向的實例的數量。您基本上正在寫入垃圾,它位於ptr指向的內容後面。

查看docs瞭解更多詳情。

+0

非常感謝,我明白了爲什麼我得到了這個結果! – taoufeqreda