24-bit bitmap erstellen



  • Hallo zusammen,

    nachfolgender Code erzeugt ein einfaches 24-Bit bmp-File. Wenn ich jedoch von dem erzeugten Bild die Endung in .txt umwandle, steht in der Textfile neben den Bilddaten auch Header + Padding-Bits. Bei Bildern die in Paint o.a. erstellt werden passiert das nicht. Wo liegt der Unterschied, mein Fehler?

    // /.../
    ifstream filein(input.c_str(), ios::in|ios::binary);
    ofstream fileout(output.c_str(), ios::out|ios::binary);
    // /.../
    fileout.write(memblock_header, (sizeof(header)));
    filein.read(memblock_file, (sizeof(file)));
    // /.../
    fileout.write(memblock_file, (sizeof(file)));
    // /.../
    


  • Den Header haste doch selber in Zeile 5 rausgeschrieben.

    Das Padding musst Du ausmachen, wenn Du so rausschreuben willst,
    #pragma pack
    oder so, je nach compiler.



  • Hm, ich bin etwas verwirrt, aber danke schonmal.

    Meinst du sowas?

    #pragma pack(2)
    

    falls ja, ist vorhanden.

    Mir es geht hier um die Padding-Bits am Ende jeder Zeile des Bildes.
    $ = Padding-Bits
    So sieht es aus:
    "BM> 6 (      Ä Ä TSET $$"

    So sollte es aussehen:
    "TSET "



  • Peter43 schrieb:

    Hm, ich bin etwas verwirrt, aber danke schonmal.

    Meinst du sowas?

    #pragma pack(2)
    

    falls ja, ist vorhanden.

    Ja, das meinte ich. Es würde ein anderes Padding erzeugen.

    Woher Deins am Ende jeder Zeile kommt, lann ich mir nicht erklären.

    Peter43 schrieb:

    Mir es geht hier um die Padding-Bits am Ende jeder Zeile des Bildes.

    Wie ist denn memblock_file erzeugt worden?



  • Das kommt daher da in jeder Zeile des Bildes eine durch 4 teilebare Anzahl an Bytes steht, wenns nicht passt wird das nötige ergänzt.

    Ich hätte memblock_file1 und memblock_file2 schreiben sollen, das erste wird ganz einfach mit Daten der input-File gefüllt, das zweite wird aus dem ersten erzeugt und an den Header angeängt der output-File angehängt.



  • char*memblock_file=new char[size];
    

    so 😛



  • Mein Fehler, auch bei bmp-Bildern die mit Paint o.a. erstellt werden sieht man in der txt-File, Header und Padding-Bytes!



  • Peter43 schrieb:

    Mein Fehler, auch bei bmp-Bildern die mit Paint o.a. erstellt werden sieht man in der txt-File, Header und Padding-Bytes!

    Natürlich sieht man die Padding-Bytes, die müssen ja immer da sein.

    Bzw. ob man sie sieht oder nicht, hängt natürlich vom Editor und vom Wert der Bytes ab.
    Manche Texteditoren zeigen bestimmte Zeichen wohl nicht an (z.B. ASCII Codec 0-7).

    Ich weiss jetzt nicht auswendig ob das BMP Format vorschreibt dass die Padding-Bytes immer 0 sein müssen. Wenn nicht kannst du dir ja zumindest aussuchen was du reinschreibst. Anbieten würden sich, wenn du die Files in nem Texteditor angucken willst, mMn. das Leerzeichen, "~" oder "#".


Anmelden zum Antworten