School-Coding-Cpp/sfusi/genera_file_metodo_1.cpp

86 lines
1.8 KiB
C++

/*
Nome: Mario
Cognome: Montanari
Classe: 3AIN
Data: 02/05/2025
Metodo 1 per la generazione di un immagine .bmp (copio un'immagine già esistente
e la modifico come voglio).
*/
#include <iostream>
using namespace std;
#pragma pack(1)
typedef struct {
char bfType[2];
int bfSize;
int bfReserved;
int bfOffBits;
} BITMAPFILEHEADER;
typedef struct {
unsigned char b;
unsigned char g;
unsigned char r;
} BGR;
int main(void) {
cout << "Size of BITMAPFILEHEADER: " << sizeof(BITMAPFILEHEADER) << endl;
FILE * file = fopen("immagine_generata.bmp", "r+b");
if (file != NULL) {
int bfOffBits;
BITMAPFILEHEADER bf;
fread(&bf, sizeof(bf), 1, file);
cout << "bfType: " << bf.bfType[0] << bf.bfType[1] << endl;
cout << "bfSize: " << bf.bfSize << endl;
cout << "bfReserved: " << bf.bfReserved << endl;
cout << "bfOffBits: " << bf.bfOffBits << endl;
fseek(file, bf.bfOffBits, SEEK_SET);
BGR bgr[20 * 20];
/* METODO 1 PER LA VERIFICA DELLA LETTURA DEL PIXEL
if(fread(&bgr, sizeof(BGR), 20 * 20, file) < 400) {
cout << "Errore di scrittura." << endl;
}
*/
// METODO 2 PER LA VERIFICA DELLA LETTURA DEL PIXEL
if(fread(&bgr, sizeof(bgr), 1, file) < 1) {
cout << "Errore di scrittura." << endl;
}
for (int i = 0; i < 20 * 20; i++) {
bgr[i].b = 0;
bgr[i].g = 255;
bgr[i].r = 0;
}
fseek(file, bf.bfOffBits, SEEK_SET);
/* METODO 1 PER LA VERIFICA DELLA SCRITTURA DEL PIXEL
if(fwrite(&bgr, sizeof(BGR), 20 * 20, file) < 400) {
cout << "Errore di scrittura." << endl;
}
*/
// METODO 1 PER LA VERIFICA DELLA SCRITTURA DEL PIXEL
if(fwrite(&bgr, sizeof(bgr), 1, file) < 1) {
cout << "Errore di scrittura." << endl;
}
fclose(file);
} else {
perror("Error (source)");
}
return 0;
}