BMP bestanden genereren met C++

Status
Niet open voor verdere reacties.

aeweber

Gebruiker
Lid geworden
17 mrt 2005
Berichten
36
Een vraagje:

Is het mogelijk, en zo ja hoe, om een C++ programma een bmp bestand (pixel voor pixel) te laten schrijven? (Ik ga uit van een 24-bits bmp file)

Ik ken de basis van C++ en ik weet hoe je tekst in een uitvoer-file kan schrijven. Mijn vraag is dus:

1. Kan ik op die manier (dus met een ofstream en de << operator) ook binaire bestanden schrijven?
2. Zo ja, kan ik dan een bmp plaatje maken door per pixel de 24 bits voor de kleur in het bestand te schrijven?

Bij voorbaat dank?
 
Bedankt, :)

ik heb inmiddels een beschrijving gevonden van de structuur van het BMP formaat, dus dat probleem is opgelost.

Alleen zit ik nog met het probleem:
hoe kan ik in C++ een reeks bytes (gegeven in hexadecimale notatie) naar een binair bestand schrijven? Het volgende werkt niet:

Code:
int main()
{  ofstream out;
   out.open("piccy.bmp", ios::binary | ios::trunc);
   out << "00FF";
   out.close();
   return 0;
}

evenals hetvolgende:

Code:
int main()
{  ofstream out;
   out.open("piccy.bmp", ios::binary | ios::trunc);
   out << "0000000011111111";
   out.close();
   return 0;
}

Iemand een idee hoe het wel kan?
 
"00FF" is een string, 0x00FF is de C manier om een hex getal te typen. De binaire versie weet ik niet uit m'n hoofd, maar google is vast wel je vriend in dit soort zaken.
Let misschien nog wel even op big/little endian problemen, maar aangezien dit windows specifiek is, is het x86 gebonden dus waarschijnlijk geen probleem
 
Helaas, ook als ik

out << "00FF"

vervang door

out << 0x00FF of out << 0x00ff

werkt het niet. Er wordt wel een bestand aangemaakt, maar die is leeg; als ik 'm open in een hex-editor of tekst-editor is er niks te zien...
 
Dit maakt wel een bestand aan bij mijn en schrijft binary data:

PHP:
#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, char *argv[])
{
   ofstream out;
   int x = 0xff;
   out.open("piccy.bmp", ios::binary | ios::trunc);
   out.write((char*)&x, sizeof(int));
   out.close();
   return EXIT_SUCCESS;
}
 
Te gek, bedankt! :D Mijn programma werkt nu; ik kan voorlopig uit de voeten.

Nog een opmerking: ik las dat het met ofstream bij sommige compilers niet werkt vanwege bugs in de compiler;
bij mij ging dat in eerste instantie ook mis, maar het werkt wel als ik een fstream gebruik in combinatie met ios:: out.

Nogmaals thx!
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan