Hallo,
ich habe eine Klasse PPM geschrieben, in der über die Funktion einlesen() eine PPM-Datei eingelesen wird und deren Daten in Membervariablen gespeichert werden.
Für die Pixel habe ich ein Array erstellt. Ich habe durch Tests mit printf festgestellt, dass das Array korrekt befüllt wird.
In der Funktion dateiSchreiben() sollen nun die Daten aus den Membervariablen in eine neue Datei geschrieben werden.
Wenn ich die Funktion wie gezeigt aufrufe, ist die Datei image.ppm jedoch leer.
Merkwürdigerweise wird jedoch die Kopfzeile korrekt in die Datei geschrieben, wenn ich den Teil, der die Pixel in die Datei schreibt, vorher auskommentiere.
Es wäre sehr nett, wenn mir jemand erklären könnte, wie ich das Array korrekt in die neue Datei schreibe.
Vielen Dank im Voraus!
ich habe eine Klasse PPM geschrieben, in der über die Funktion einlesen() eine PPM-Datei eingelesen wird und deren Daten in Membervariablen gespeichert werden.
Für die Pixel habe ich ein Array erstellt. Ich habe durch Tests mit printf festgestellt, dass das Array korrekt befüllt wird.
In der Funktion dateiSchreiben() sollen nun die Daten aus den Membervariablen in eine neue Datei geschrieben werden.
Wenn ich die Funktion wie gezeigt aufrufe, ist die Datei image.ppm jedoch leer.
Merkwürdigerweise wird jedoch die Kopfzeile korrekt in die Datei geschrieben, wenn ich den Teil, der die Pixel in die Datei schreibt, vorher auskommentiere.
C++:
#include <iostream>
#include <string.h>
class PPM
{
public:
char path[255];
FILE *in;
char format[3];
int bildbreite;
int bildhoehe;
int maxHelligkeit;
int* pixelArrayP3;
public:
PPM(char path[255])
{
std::copy(path, path + 255, this->path);
}
void einlesen()
{
char letter;
int zahlenInHeaderGespeichert=0;
in=fopen(path, "rb");
FILE* out;
out = fopen("ohneKommentare.ppm", "wb");
char c;
//Kommentare entfernen
while(!feof(in)) {
c=fgetc(in);
if(c=='#') {
do {
c=fgetc(in);
} while(c!='\n');
continue;
}
fprintf(out,"%c",c);
}
fclose(in);
//Ab hier wird die neue Datei ohne Kommentare genutzt
FILE *datei;
datei=fopen("ohneKommentare.ppm","rb");
//Informationen der Datei in Membervariablen speichern
while(!feof(datei)) {
letter=fgetc(datei);
//Format speichern
if(letter=='P') {
format[0]=letter;
letter=fgetc(datei);
format[1]=letter;
format[2]=0;
continue;
}
//Zahlen für Bildbreite,Helligkeit und max. Helligkeit speichern
if(!zahlenInHeaderGespeichert) {
fscanf(datei,"%d",&bildbreite);
fscanf(datei,"%d",&bildhoehe);
fscanf(datei,"%d",&maxHelligkeit);
zahlenInHeaderGespeichert=1;
}
//Pixel dezimal speichern, wenn Datei im P3-Format vorliegt
if(format[0]=='P' && format[1]=='3') {
int i;
pixelArrayP3=new int[bildbreite*bildhoehe*3];
for(i=0; i<(bildbreite*bildhoehe*3); i++) {
fscanf(datei,"%d",pixelArrayP3);
//printf("%d\n",*pixelArrayP3);
pixelArrayP3++;
}
}
}
}
void dateiSchreiben()
{
FILE *datei;
datei=fopen("image.ppm","wb");
fprintf(datei,"%c",format[0]);
fprintf(datei,"%c\n",format[1]);
fprintf(datei,"%d ", bildbreite);
fprintf(datei,"%d\n", bildhoehe);
fprintf(datei,"%d\n", maxHelligkeit);
if(format[0]=='P' && format[1]=='3') {
int i;
for(i=0; i<(bildbreite*bildhoehe*3); i++) {
fprintf(datei,"%d\n",pixelArrayP3[i]);
}
}
}
};
int main()
{
char path[255];
scanf("%s", path);
PPM file(path);
file.einlesen();
file.dateiSchreiben();
return 0;
}
Es wäre sehr nett, wenn mir jemand erklären könnte, wie ich das Array korrekt in die neue Datei schreibe.
Vielen Dank im Voraus!