Frage

Ich versuche, eine PGM-Datei in einem C-Programm zu schreiben, aber sobald sie geschrieben ist und ich versuche, sie zu öffnen, um das Bild anzuzeigen, wird mir mitgeteilt, dass das Bilddateiformat nicht bestimmt werden kann.

Wenn ich jedoch eine neue Datei in geany erstelle, die Daten kopiere und DAS dann als neues PGM speichere, funktioniert es.

Irgendeine Idee, woran das liegen könnte?

FILE * grey = fopen("greyscale.pgm", "w");

fprintf(grey, "P2 \r\n%d %d \r\n255 \r\n", width, height);

for (i = 0; i < width; i++) {
    for (j = 0; j < height; j++) {
        fprintf(grey, "%d ", ((imageArray[i][j].red + imageArray[i][j].green + imageArray[i][j].blue)/3));
    }
    fprintf(grey, "\r\n");
}

Ich konvertiere ein Farbbild in Graustufen.

War es hilfreich?

Lösung

Ich denke, Sie sollten es nicht verwenden \r\n als Zeilenbegrenzer, aber nur \n.Stellen Sie außerdem sicher, dass keine Zeile länger als 70 Zeichen ist.Da jedes Pixel höchstens 4 Zeichen (3 plus Leerzeichen) einfügen muss \n nach jeweils 17 Pixeln.Sie können echte Zeilen durch Kommentare trennen (zum Beispiel:

pixel11 pixel12 pixel13
pixel14 pixel15
# switch to next row
pixel21 pixel22 pixel23
pixel24 pixel25
# etc.

Andere Tipps

Wenn Sie Ihren Code ansehen, sehe ich, dass Sie einen generationspoDiCETAGCODE-Elemente einfügen, indem Sie alle generationspflichtigen Elemente-Elemente einfügen.Nach dem PGM-Dateiformat folgt nach dem Header

  • ein Raster von Höhenreihen , in der Reihenfolge von oben nach unten.Jede Zeile besteht aus WIDTH-Grauwerten, in der Reihenfolge von links nach rechts.

    aber Sie schreiben eine Reihe von Höhenelement.Sie können also wahrscheinlich auf Daten auf Daten zugreifen.Versuchen Sie tatsächlich zu debuggen (mit einem Bleistift) ein Bild von 3 Säulen (Breite) und 4 Zeilen (Höhe).

    hat das gesagt, ändern Sie Ihre Schleife, um Daten in rosatorischer Reihenfolge zu schreiben: generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top