C++ Comment créer un fichier bitmap

Je suis à essayer de comprendre comment créer un fichier bitmap en C++ VS. Actuellement, j'ai pris le nom de fichier et l'ajout de l' ".bmp" l'extension à créer le fichier. Je veux savoir comment je pouvais changer les pixels du fichier en faisant en différentes couleurs ou des motifs (ie. comme un damier) C'est ma fonction que j'ai et je crois que j'ai envoyer 3 Octets différents à la fois afin d'établir la couleur du pixel.

void makeCheckerboardBMP(string fileName, int squaresize, int n) {
ofstream ofs;
ofs.open(fileName + ".bmp");
writeHeader(ofs, n, n);
for(int row = 0; row < n; row++) {
for(int col = 0; col < n; col++) {
if(col % 2 == 0) {
ofs << 0;
ofs << 0;
ofs << 0;
} else {
ofs << 255;
ofs << 255;
ofs << 255;
}
}
}
}
void writeHeader(ostream& out, int width, int height){
if (width % 4 != 0) {
cerr << "ERROR: There is a windows-imposed requirement on BMP that the width be a          
multiple of 4.\n";
cerr << "Your width does not meet this requirement, hence this will fail.  You can fix     
this\n";
cerr << "by increasing the width to a multiple of 4." << endl;
exit(1);
}
BITMAPFILEHEADER tWBFH;
tWBFH.bfType = 0x4d42;
tWBFH.bfSize = 14 + 40 + (width*height*3);
tWBFH.bfReserved1 = 0;
tWBFH.bfReserved2 = 0;
tWBFH.bfOffBits = 14 + 40;
BITMAPINFOHEADER tW2BH;
memset(&tW2BH,0,40);
tW2BH.biSize = 40;
tW2BH.biWidth = width;
tW2BH.biHeight = height;
tW2BH.biPlanes = 1;
tW2BH.biBitCount = 24;
tW2BH.biCompression = 0;
out.write((char*)(&tWBFH),14);
out.write((char*)(&tW2BH),40);
}
(1) Avez-vous fermer le flux de données? (2) Vous pouvez modifier la taille en modifiant l'en-tête (c'est une propriété dans l'en-tête)
Lorsqu'un objet est hors de portée de son destructeur est appelé. ofstreams destructeur appelle close. Donc oui, le cours d'eau est fermé.
Oui je l'ai fait fermer le flux de données
Bien dans certains langages de programmation, vous devez fermer le flux de données, et je n'aurais pas compter sur de telles méthodes. Car vous ne savez pas quand le destructeur sera appelé, il peut prendre des heures. Et la tenue d'un fichier ouvert n'est pas une bonne idée car cela peut provoquer des conflits avec d'autres programmes ou à cause de l'OS de tuer le programme quand vous avez trop de fichiers ouverts. 😀
La question est étiqueté c++; votre référence à "certains langages de programmation" est surprenant. Dans le code ci-dessus vous ne voir quand le destructeur s'exécute. ofs est localement étendue; la durée de vie est facile à deviner. Comme pour le "trop de fichiers ouverts" argument: avoir un vrai OS.

OriginalL'auteur user2557642 | 2013-09-16