fopen/fseek/fgetc verkehrtherum

OP Persönliche Seite #385466
Hi Leutz.

Ich wende folgenden Code an, um aus einer Bitmap Datei die RAW daten zu
lesen.
1
#include "stdio.h"
2
#include "stdlib.h"
3

4
int main()
5
{
6

7
  FILE* filehandle1;
8
  int i;
9
  char temp[100];
10

11

12
  filehandle1 = fopen("C:\\ani\\2.bmp","r");
13

14
  fseek(filehandle1,-0x40, SEEK_END);
15

16
  
17
    for(i=0;i<64;i +=4)
18
    {
19
      itoa((unsigned char)~getc(filehandle1),temp,2);
20
      printf("%08.8s",temp);
21
      itoa((unsigned char)~getc(filehandle1),temp,2);
22
      printf("%08.8s",temp);
23
      itoa((unsigned char)~getc(filehandle1),temp,2);
24
      printf("%08.8s",temp);
25
      itoa((unsigned char)~getc(filehandle1),temp,2);
26
      printf("%08.8s\n",temp);
27
    }
28

29

30
  fclose(filehandle1);
31

32
  return 0;
33
}

(4 Bytes pro Zeile)

Das Problem ist, dass das Bild Vertikal seitenverkehrt ist.
ich habe mal ein bild angehangen, welches ich durch das programm gejagt
habe. (Habe es nach GIF umgewandelt, da BMP nicht erlaubt ist hier). im
nächsten beitrag gibts dann das ergebnis.
Angehängte Dateien:
nein, Windows speichert das Bild wirklich seitenverkehrt (bzw. unterste
Zeile zuerst) ab.

mach vor jeder Zeile noch ein fseek(filehandle1, -0x04 - i, SEEK_END),
dann sollt er die Datei "rückwärts" einlesen.
Gruß
Roland
OP Persönliche Seite
Jo!
1
#include "stdio.h"
2
#include "stdlib.h"
3

4
int main()
5
{
6

7
  FILE* filehandle1;
8
  int i;
9
  char temp[100];
10

11

12
  filehandle1 = fopen("C:\\ani\\2.bmp","r");
13

14
  fseek(filehandle1,-0x40, SEEK_END);
15

16
  
17
    for(i=0;i<64;i +=4)
18
    {
19
      fseek(filehandle1, -4-i, SEEK_END);
20
      itoa((unsigned char)~getc(filehandle1),temp,2);
21
      printf("%08.8s",temp);
22
      itoa((unsigned char)~getc(filehandle1),temp,2);
23
      printf("%08.8s",temp);
24
      itoa((unsigned char)~getc(filehandle1),temp,2);
25
      printf("%08.8s",temp);
26
      itoa((unsigned char)~getc(filehandle1),temp,2);
27
      printf("%08.8s\n",temp);
28
    }
29

30

31
  fclose(filehandle1);
32

33
  return 0;
34
}

funktioniert!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.