Schwierigkeiten mit Bitmapinfoheader

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Schwierigkeiten mit Bitmapinfoheader

    Guten abend,

    zunächst versuche ich lediglich Daten über ein Bild zu ermitteln.

    Ich beschaffe mir zunächst den BITMAPFILEHEADER (Fileheader) sowie den BITMAPINFOHEADER (Infoheader) und übergebe diese dann an eine Funktion, die ein paar Informationen zu der Datei ausgeben soll.

    Mit dem Fileheader ist alles in ordnung. Allerdings bekomme ich falsche Werte, wenn ich auf den Infoheader zugreife.

    Den Infoheader beschaffe ich mir über folgende Funktion:

    Quellcode

    1. BITMAPINFOHEADER getInfoheader(char *file)
    2. {
    3. FILE *fileHandler = fopen(file, "rb");
    4. if(fileHandler)
    5. {
    6. BITMAPINFOHEADER bmih;
    7. fread((char *)&bmih, sizeof(BITMAPINFOHEADER), 1, fileHandler);
    8. fclose(fileHandler);
    9. return bmih;
    10. }
    11. else
    12. {
    13. printf("Fehler, Datei nicht gefunden!\n");
    14. exit(1);
    15. }
    16. }
    Alles anzeigen



    Anschließend versuche ich Informationen auszulesen:

    Quellcode

    1. void getHeaderInfo(BITMAPFILEHEADER *bmfh,
    2. BITMAPINFOHEADER *mbih)
    3. {
    4. printf("\nASCII: %d\nReserved: %d\nFilesize: %d kb\nOffset: %d\n",
    5. bmfh->bfType, // Muss den dezimalen Wert 19778 haben
    6. bmfh->bfReserved1, // Wert 0
    7. ((bmfh->bfSize-bmfh->bfOffBits)/1024),
    8. bmfh->bfOffBits);
    9. printf("Size of Infoblock: %d\nPixel: %d x %d\n",
    10. mbih->biSize,
    11. mbih->biWidth, mbih->biHeight);
    12. }
    Alles anzeigen


    Das Problem liegt nun an dem Infoheader. Ich erhalte falsche Werte. So z.B. eine Breite von 2 Pixeln und eine Höhe von mehreren Millionen Pixeln (Wobei das Bild ~250x300 Pixel groß ist).

    Ich habe bereits mehrere BMP Dateien mit Paint erstellt und auch welche aus dem Internet probiert, aber es ergaben sich jedesmal derartig falsche Werte.