2017-10-19 1 views
1

Ich versuche, ein Programm in C zu schreiben, die Bitmap-Bilder durch einen bestimmten Faktor skaliert, wenn ich fwrite() in einer Schleife verwenden, dies zu tun:Wie funktioniert 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); 
    } 
} 

Alles funktioniert:

Input BitmapOutput Bitmap

Aber wenn ich fwrite() ohne Schleife:

// 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); 
} 

ich dieses:

Output Bitmap

Warum passiert das das?

+0

weil in der Kopfzeile haben Sie die gleiche Größe des Bildes, aber Körper hat mehr Informationen –

+2

In Ihrem zweiten Fall lesen Sie nur 1 'RGBTRIPLE', aber Sie schreiben' Faktor' 'RGBTRIPLE's – MFisherKDX

+0

ist dies [ hilfreich] (https://stackoverflow.com/questions/11569217/how-to-resize-a-bitmap). –

Antwort

1

Das Problem ist der dritte Parameter, count, zeigt an, wie viele Elemente im Array von ptr gezeigt werden, nicht, wie oft die Instanz als ptr geschrieben werden sollte geschrieben. Du schreibst im Grunde Müll, der hinter dem steht, was ptr anzeigt.

Weitere Informationen finden Sie unter docs.

+0

Vielen Dank, ich verstehe jetzt, warum ich dieses Ergebnis bekomme! – taoufeqreda