Hallo zusammen,
ich steh gerade irgendwie total aufm Schlauch. Im Prinzip kommt der Code aus dem anderen Thread hier von mir, aber das tut nicht so viel zur Sache bzw. zur Frage. Ich habe folgenden Code:
Was er meiner Meinung nach macht ist folgendes: Er öffnet die fb0 Datei und läuft dann Breite x Höhe oft die for Schleife durch, dabei liest er 4 Bytes in "pixel" ein und nimmt dann das zweite Byte, das dritte Byte und das vierte Byte für die jeweiligen Farben mit einem Bitshift, sodass die Werte für die jeweiligen Farben am Anfang stehen. D.h., dass das erste Byte immer verworfen wird.
Wenn ich den Code jetzt so ändere:
Dann müsste doch in "qu" das erste Byte landen und dann lese ich immer wieder 4 Bytes ein und nehme diesmal die ersten 3 Bytes anstatt die letzten 3 Bytes. Entsprechend muss ich den Bitshift verändern, aber wieso kommt am Ende definitiv was anderes raus? Die Farbwerte stimmen nämlich nicht mehr im entstandenen Bild.
ich steh gerade irgendwie total aufm Schlauch. Im Prinzip kommt der Code aus dem anderen Thread hier von mir, aber das tut nicht so viel zur Sache bzw. zur Frage. Ich habe folgenden Code:
Code:
int main(void) {
FILE* infile;
FILE* outfile;
unsigned char red, green, blue;
unsigned int pixel;
unsigned int maxval;
unsigned short width, height;
size_t i;
infile = fopen("D:/fb0", "r");
outfile = fopen("D:/fb.ppm", "wb");
width = 480;
height = 854;
maxval = 255;
fprintf(outfile, "P3\n#created with rgb2ppm\n%d %d\n%d\n", width, height, maxval);
for (i = 0; i < width * height; i += 1) {
fread(&pixel, 4, 1, infile);
red = (unsigned short)((pixel & 0xFF0000) >> 16); // 5
green = (unsigned short)((pixel & 0xFF00) >> 8); // 6
blue = (unsigned short)((pixel & 0xFF)); // 5
fprintf(outfile, "%d %d %d\n", red, green, blue);
}
return 0;
}
Was er meiner Meinung nach macht ist folgendes: Er öffnet die fb0 Datei und läuft dann Breite x Höhe oft die for Schleife durch, dabei liest er 4 Bytes in "pixel" ein und nimmt dann das zweite Byte, das dritte Byte und das vierte Byte für die jeweiligen Farben mit einem Bitshift, sodass die Werte für die jeweiligen Farben am Anfang stehen. D.h., dass das erste Byte immer verworfen wird.
Wenn ich den Code jetzt so ändere:
Code:
int main(void) {
FILE* infile;
FILE* outfile;
unsigned char red, green, blue;
unsigned int pixel;
unsigned char qu;
unsigned int maxval;
unsigned short width, height;
size_t i;
infile = fopen("D:/fb0", "r");
outfile = fopen("D:/fb.ppm", "wb");
width = 480;
height = 854;
maxval = 255;
fprintf(outfile, "P3\n#created with rgb2ppm\n%d %d\n%d\n", width, height, maxval);
fread(&qu, 1, 1, infile);
for (i = 0; i < width * height; i += 1) {
fread(&pixel, 4, 1, infile);
red = (unsigned short)((pixel & 0xFF000000) >> 24); // 5
green = (unsigned short)((pixel & 0xFF0000) >> 16); // 6
blue = (unsigned short)((pixel & 0xFF00) >> 8); // 5
fprintf(outfile, "%d %d %d\n", red, green, blue);
}
return 0;
}
Dann müsste doch in "qu" das erste Byte landen und dann lese ich immer wieder 4 Bytes ein und nehme diesmal die ersten 3 Bytes anstatt die letzten 3 Bytes. Entsprechend muss ich den Bitshift verändern, aber wieso kommt am Ende definitiv was anderes raus? Die Farbwerte stimmen nämlich nicht mehr im entstandenen Bild.