P6 file erstellen



  • Mein Problem ist, dass ich nicht weiss warum mein Programm zum Erstellen eines P6 files nicht funktioniert. Wenn ich das Bild nachher im GIMP aufmache ist nach ein paar Pixel die Information verschoben - d.h auf grün ist die info von rot auf blau die info von rot .... Die Zahlen die ich reinschreibe liegen zwischen 0 und 255 - ich hab keine ahnung warum das passiert

    int WriteFile(char* fileName, const int height,const int width, int maxVal, vector<unsigned char> pic){

    FILE out;
    const char
    buf= fileName;
    out=fopen(buf,"wt+");

    if(out == NULL) printf("failed to open file! \n");

    fprintf(out,"P6 ");
    fprintf(out,"%d ",width);
    fprintf(out,"%d ",height);
    fprintf(out,"%d ",maxVal);

    for(int i=0; i<pic.size();i++)
    fwrite(&pic[i],sizeof(unsigned char),1,out);

    fclose(out);

    return 1;

    }

    Wäre echt dankbar wenn mir wer weiterhelfen könnte, weil ich hab keine Ahnung was falsch ist
    mfg mary



  • Laß' mal das 't' wus "wt+" weg. Da holst du dir umwandlungen "\r" ==> "\r\n" rein, die für Binärdateien nicht gut sein können...



  • Bei Binärdateien bietet sich fprintf eh nicht an.



  • ich hab das jetzt umgebessert, aber der Sprung bleibt drinnen - der passiert immer dann wenn von 9 auf 10 in einer Farbe übergegangen wird. Muss ich da ein Leerzeichen einfügen - ist normalerweise nicht erlaubt
    mfg Mary



  • wie wärs mit C++?
    Das da oben ist reines C...



  • probier mal

    "wb+" (sollte binär erzwingen...)
    Ich komm mit dem Zeugs auch immer durcheinander.

    hast du nen Link wie das "P6"-Format definiert ist?
    Ich geh' mal davon aus das die eigentlichen Daten binär sein sollen, aber man weiß ja nie.

    .not: was würde C++ hier besser machen?



  • @peterchen+: In C++ würde man einen ofstream benutzen.



  • Danke für die Hilfe - mit "wb+" funktionierts. mit ofstream hab ich es eh schon versucht, aber der schreibt nicht binär raus, da gibts die selben Probleme.
    Vielen Dank Mary



  • schön 😉

    Damit's ein bißchen fixer geht, kannst du auch

    fwrite( &(pic[0]), pic.size(), 1,out);

    verwenden.


Anmelden zum Antworten