Bitmap erzeugen mit C++

the_undertaker

Erfahrenes Mitglied
Hallo,

ich habe einen Code, um ein Fraktal zu erzeugen und möchte damit nun eine Bitmap erstellen; dazu folgende Fragen:
  1. Wie erstelle ich die Datei fraktal.bmp mit x mal y Pixeln?
  2. Wie "übersetze" ich "färbe pixel (x|y) rot" in C++?
Vielen Dank im Voraus für hilfreiche Antworten,

the_undertaker
 
Zuletzt bearbeitet:
Hallo,

danke erstmal für die Antwort.
Das mit dem Format hab ich mir schon vor ein paar Wochen angeschaut und auch schon ausprobiert, soweit ich gekommen bin; die Sache hat nur einen(?) Haken: das mit dem ASCII-Zeichen 0x00 funktioniert nicht. Wahrscheinlich gibts da noch mehr Probleme, aber weiter als bis zur ersten 0 komm ich halt nicht.

Gruß

the_undertaker
 
Wenn da Zeichen 00 funktioniert nicht steht, kann das nur eins bedeuten: Du musst die Files binär behandeln, nicht als Text-Dateien.
 
Hallo,

ich bin jetzt so weit gekommen, soweit funktioniert es auch:
Code:
ofstream outfile("pascal.bmp", fstream::out | fstream::binary);
outfile.put('a');
Das mit dem filestr.open hat nicht geklappt, deswegen nehme ich ofstream outfile
Nun zwei Fragen:
  1. outfile<< funktioniert bei mir nicht, ich muss also outfile.put() verwenden, da kann ich aber immer nur einzelne Zeichen ausgeben. Geht das auch irgendwie einfacher?
  2. Wie gebe ich dann z. B. das ASCII-Zeichen 0x00 ein( als 0x00 oder 00000000):confused:?
Gruß, the_undertaker
 
Hallo,
ich habs nochmal mit outfile<< probiert, es funktioniert jetzt auch. Ich kann ASCII-Zeichen wie 0x01 etc. ausgeben mit outfile<<"\x01"; aber 0x00 funktioniert immer noch nicht. Ich habe das Gefühl, dass er dann immer die Datei schließt, anstatt 0x00 reinzuschreiben. Kann mir da jemand helfen?:confused:
Vielen Dank,
the_undertaker
 
Hallo,

ein Nullbyte markiert in einem C-String das Ende der Zeichenkette. Deswegen ist "\x00" in diesem Fall gleichbedeutend mit dem leeren String "". Der operator << ist eigentlich für formatiere Ausgaben gedacht und deshalb bei Binärdaten nur bedingt geeignet. Verwende stattdessen die Methoden put(char) sowie write(const char *, streamsize).

Beispiel:
C++:
#include <fstream>

using namespace std;

int main(void)
{
    ofstream outfile("test.bin", ios::out | ios::binary);

    outfile.put(0); // einzelnes Nullbyte schreiben

    char *data = new char[256];
    for (int i = 0; i < 256; ++i) data[i] = i;
    outfile.write(data, 256); // alle Werte von 00h bis FFh schreiben
    delete [] data;

    outfile.close();

    return 0;
}

Grüße,
Matthias
 
Hallo,

vielen Dank für die Hilfe, das war genau das, was ich brauchte:).
Ich habe da noch ein paar Fragen:
Was bedeuten
new char[256] und delete [] data;?
Habe ich das richtig verstanden, dass outfile.write(data, 256) die ersten 256 Zeichen vom Array data ausgibt?
Warum schreibst du int main(void) statt int main()?

Gruß, the_undertaker

Nochwas: Kann ich auch outfile.write("BM", 2); schreiben?
oufile.put(255) funktioniert bei mir nicht.
 
Zuletzt bearbeitet:
Zurück