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.
Da ist es
Und? Das bild ist Vertikal spiegelverkehrt. Sprich die Linie, die
eigentlich nach ganz oben gehört, liegt unten.
Ich werde das Gefühl nicht los, dass mich da wieder was Endianmäßiges
plagt.
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
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!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
|