repla34 Geschrieben 6. Mai 2011 Geschrieben 6. Mai 2011 Ich schreibe eine kleine Anwendung zur Bildmanipulation mit C. 1 zu 1 kopie usw. kann ich erzeugen. Allerdings, ich muss noch die Farben manipulieren. z.B. die Sättigung von Blau verdoppeln. Dafür muss ich die Farbtabelle einlessen. Die Frage ist; Wie soll ich die Farbtabelle einlesen? #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]){ int c, z[2], i; int breite, hoehe, aufloesung, farbtiefe; FILE *in; FILE *out; int *tmp; in = fopen(argv[1], "rb"); if(argc == 3){ // prüfen ob es eine Bilddatei ist und kopieren if( ((z[0] = fgetc(in)) == 'B') && ((z[1] = fgetc(in)) == 'M')) { printf("\nEs handelt sich um eine .bmp Bilddatei."); out = fopen(argv[2], "wb"); fputc(z[0], out); fputc(z[1], out); while( (c=fgetc(in)) != EOF){ fputc(c, out); } } fclose(out); } //Aufloesung in pixel fseek(in, 18L, 0); fread(&breite, sizeof(long), 1, in); fseek(in, 22L, 0); fread(&hoehe, sizeof(long), 1, in); aufloesung = breite * hoehe; fseek(in, 28L, 0); farbtiefe = fgetc(in); printf("\nFarbtiefe: %d Bit\n", farbtiefe); fclose(in); return 0; }
Bubble Geschrieben 6. Mai 2011 Geschrieben 6. Mai 2011 Die Frage ist; Wie soll ich die Farbtabelle einlesen? Davor steht aber noch die Frage, ob die jeweilige BMP-Datei überhaupt eine hat (24bpp Modi).
repla34 Geschrieben 6. Mai 2011 Autor Geschrieben 6. Mai 2011 Ja, die Jeweilige BMP datei hat eine Farbtabelle.Ich will zuerst die Farbtabelle in dynamisch reservierte Speicherplatz einlesen und da ändern. Die jeweilige Bilddatei hat 8 Bit farbtiefe.
repla34 Geschrieben 6. Mai 2011 Autor Geschrieben 6. Mai 2011 Davor steht aber noch die Frage, ob die jeweilige BMP-Datei überhaupt eine hat (24bpp Modi). Ja, die Jeweilige BMP datei hat eine Farbtabelle.Ich will zuerst die Farbtabelle in dynamisch reservierte Speicherplatz einlesen und da ändern. Die jeweilige Bilddatei hat 8 Bit farbtiefe.
Bubble Geschrieben 6. Mai 2011 Geschrieben 6. Mai 2011 Wo ist dann das Problem? Das Format ist doch bestens dokumentiert?
repla34 Geschrieben 7. Mai 2011 Autor Geschrieben 7. Mai 2011 Wo ist dann das Problem? Das Format ist doch bestens dokumentiert? Wie soll ich die Farbtabelle manipulieren? Mit fseek(in, 54L, 0); positioniere ich die Zeiger.
Bubble Geschrieben 7. Mai 2011 Geschrieben 7. Mai 2011 (bearbeitet) Indem Du die Bitmap-Datei einliest, die Farbtabelle änderst und die Datei neu schreibst. Narürlich könntest Du auch nur die Farbtabelle einlesen, diese verändern und dann in der Ausgangsdatei überschreiben. Wo die Tabelle in der Datei steht (hinter dem Header) und wie sie aufgebaut ist, geht wie gesagt aus der Dokumentation hervor. Falls es Dir aber nicht um die eigentliche Tabelle, sondern darum geht, wie man Sättigung, usw. von Farben ändert, dann sag das bitte. Bearbeitet 7. Mai 2011 von Bubble
repla34 Geschrieben 7. Mai 2011 Autor Geschrieben 7. Mai 2011 Indem Du die Bitmap-Datei einliest, die Farbtabelle änderst und die Datei neu schreibst. Narürlich könntest Du auch nur die Farbtabelle einlesen, diese verändern und dann in der Ausgangsdatei überschreiben. Wo die Tabelle in der Datei steht (hinter dem Header) und wie sie aufgebaut ist, geht wie gesagt aus der Dokumentation hervor. Falls es Dir aber nicht um die eigentliche Tabelle, sondern darum geht, wie man Sättigung, usw. von Farben ändert, dann sag das bitte. Ich will die Sättigung ändern. z.B. die Sättigung von Rot oder Blau verdoppeln. Muss man dafür die Farbtabelle ändern oder wie gehe ich vor?
Bubble Geschrieben 7. Mai 2011 Geschrieben 7. Mai 2011 Bei auf Farbtabellen basierenden Bitmaps: Ja. Die Tabelle muss verändert werden, da sie die Farbwerte enthält und die eigentliche Bitmap nur aus Verweisen in diese Tabelle besteht.
repla34 Geschrieben 7. Mai 2011 Autor Geschrieben 7. Mai 2011 Bei auf Farbtabellen basierenden Bitmaps: Ja. Die Tabelle muss verändert werden, da sie die Farbwerte enthält und die eigentliche Bitmap nur aus Verweisen in diese Tabelle besteht. Muss ich die Farben pixel zu pixel ändern?
Bubble Geschrieben 7. Mai 2011 Geschrieben 7. Mai 2011 Muss ich die Farben pixel zu pixel ändern? Bei Bitmaps mit Farbtabellen natürlich nicht.
repla34 Geschrieben 7. Mai 2011 Autor Geschrieben 7. Mai 2011 Bei Bitmaps mit Farbtabellen natürlich nicht. Das war sehr hilfreich. danke.
repla34 Geschrieben 7. Mai 2011 Autor Geschrieben 7. Mai 2011 Bei Bitmaps mit Farbtabellen natürlich nicht. Die Farbtabelle beginnt bei Offset 54. Ich habe versucht die Farbtabelle so auszulesen: fseek(in, 54L, 0); for(i=0; i<aufloesung; i++){ c = fgetc(in); printf("%d", c); } Ausgabe: 11 9 7 0 18 13 9 0 usw. Ist das die Farbtabelle? und bis wohin geht das? breite * hoehe? oder muss ich die Auflösung des Bildschirmes berücksichtigen?
Bubble Geschrieben 7. Mai 2011 Geschrieben 7. Mai 2011 Die Farbtabelle kann an verschiedenen Offsets liegen, je nach verwendetem Header und den darin gemachten Angaben. Wenn ein Programm flexibel sein soll, sollte es damit umgehen können. Ist das die Farbtabelle? und bis wohin geht das? breite * hoehe? Das war zwar die Farbtabelle, oder zumindest ein Ausschnitt aus ihr, aber mir scheint es so, als ob noch eine ganze Reihe an Grundlagen fehlen, z.B. was diese Tabelle macht, wie viele Einträge sie hat und wie eine solche Bitmap aufgebaut ist. Daher wäre es gut, wenn Du Dich erst einmal damit beschäftigst, danach wird Dir klar sein, was Du tun musst.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden