Anfängerfragen C
Hallo,
ich muss für die Uni ein einfaches Bildbearbeitungstools in C schreiben. Bearbeitet werden BPM, PGM und PPM-Grafiken.
Nun habe ich erstmal zwei Funktionen geschrieben, um die Bilder einzulesen und auszugeben. Das funktioniert bei den Typen PPM und PGM einwandfrei. Beim Typ PBM habe ich aber ein Problem: Statt 0 und 1 steht in der Zieldatei der maximale Integerwert. oder 0. Ich poste mal den zuständigen Ausschnitt aus readpic und writepic:
[CODE]
else if(strcmp(B.typ, "P1") == 0){
B.deep = 2;
B.val = (int *) malloc(B.dimx*B.dimy*sizeof(int));
for(i = 0; i < B.dimx; i++){
for(j = 0; j < B.dimy; j++){
fscanf(fp, "%d", &B.val[i*B.dimx+j]);
else if(strcmp(B.typ, "P1") == 0){
for(i = 0; i < B.dimx; i++){
for(j = 0; j < B.dimy; j++){
fprintf(fp , "%d ", B.val[i*B.dimx+j]);
}
fprintf(fp, "\n");
}
[/Code]
Habe keine Erkklrung dafür, zumal ein völlig gleicher Aufbau für PGM problemlos arbeitet
hier die readpic für PGM
else if(strcmp(B.typ, "P2") == 0){
fscanf(fp, "%d", &B.deep);
B.val = (int *) malloc (B.dimx*B.dimy*sizeof(int));
for(i = 0; i < B.dimx; i++){
for(j = 0; j < B.dimy; j++){
fscanf(fp, "%d ", &B.val[i*B.dimx+j]);
}
}
}
Die Orginaql PBM fängt so an
P1
512 512
0000000000000000000000000000000000000000000000000000000000000111111111
das Ergebnis so:
P1
512 512
111111111 2147483647 2147483647 2147483647 2147483647 0 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 0
2147483647 0 2147483647 2147483647 2147483647 2147483647 0 2147483647 0 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 0 2147483647
Edit: Oh mist, es hat alle Tabs entfernt - was mache ich falsch?
ich muss für die Uni ein einfaches Bildbearbeitungstools in C schreiben. Bearbeitet werden BPM, PGM und PPM-Grafiken.
Nun habe ich erstmal zwei Funktionen geschrieben, um die Bilder einzulesen und auszugeben. Das funktioniert bei den Typen PPM und PGM einwandfrei. Beim Typ PBM habe ich aber ein Problem: Statt 0 und 1 steht in der Zieldatei der maximale Integerwert. oder 0. Ich poste mal den zuständigen Ausschnitt aus readpic und writepic:
[CODE]
else if(strcmp(B.typ, "P1") == 0){
B.deep = 2;
B.val = (int *) malloc(B.dimx*B.dimy*sizeof(int));
for(i = 0; i < B.dimx; i++){
for(j = 0; j < B.dimy; j++){
fscanf(fp, "%d", &B.val[i*B.dimx+j]);
else if(strcmp(B.typ, "P1") == 0){
for(i = 0; i < B.dimx; i++){
for(j = 0; j < B.dimy; j++){
fprintf(fp , "%d ", B.val[i*B.dimx+j]);
}
fprintf(fp, "\n");
}
[/Code]
Habe keine Erkklrung dafür, zumal ein völlig gleicher Aufbau für PGM problemlos arbeitet
hier die readpic für PGM
else if(strcmp(B.typ, "P2") == 0){
fscanf(fp, "%d", &B.deep);
B.val = (int *) malloc (B.dimx*B.dimy*sizeof(int));
for(i = 0; i < B.dimx; i++){
for(j = 0; j < B.dimy; j++){
fscanf(fp, "%d ", &B.val[i*B.dimx+j]);
}
}
}
Die Orginaql PBM fängt so an
P1
512 512
0000000000000000000000000000000000000000000000000000000000000111111111
das Ergebnis so:
P1
512 512
111111111 2147483647 2147483647 2147483647 2147483647 0 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 0
2147483647 0 2147483647 2147483647 2147483647 2147483647 0 2147483647 0 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 0 2147483647
Edit: Oh mist, es hat alle Tabs entfernt - was mache ich falsch?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 133202
Url: https://administrator.de/forum/anfaengerfragen-c-133202.html
Ausgedruckt am: 05.04.2025 um 23:04 Uhr
2 Kommentare
Neuester Kommentar
hi bierkistenschlepper
Ein bischen schwer zu verstehen was du da machst. hätte gerne ein bisschen mehr source code !
Das verstehe ich auch nicht !
Also die befehle schon, meine eigentlich warum du es so machst ?
musst do einfach das File öffnen und den Filepointer an den Anfang der Datei setzen, und dan Zeichen weise auslesen.
etwa so stelle ich mir das vor.
greetz lb
Ein bischen schwer zu verstehen was du da machst. hätte gerne ein bisschen mehr source code !
Das verstehe ich auch nicht !
B.val = (int *) malloc (B.dimx*B.dimy*sizeof(int));
Also die befehle schon, meine eigentlich warum du es so machst ?
musst do einfach das File öffnen und den Filepointer an den Anfang der Datei setzen, und dan Zeichen weise auslesen.
FILE *ptr;
int c;
ptr = fopen("test.PPM" ,"r+b");
while((c = fgetc(ptr)) != EOF ){
printf("%c", c);
}
etwa so stelle ich mir das vor.
greetz lb