raw image laden: eigenartiges verhalten
-
Hi,
Eigentlich habe ich das schon einige male erfolgreich gemacht - raw-images laden. Ich benutze den gleichen Code wie sonst, dennoch sind die Resultate nicht das, was ich erwartet habe. Im Folgenden der Konstruktor meiner Image Klasse:
Image(FILE *f,unsigned int width, unsigned int height, unsigned int channels){ // assumes f is opened for reading this->width = width; this->height = height; this->channels = channels; this->pixels = new unsigned char [width*height*channels]; fread(this->pixels,sizeof(unsigned char),width*height*channels,f); for(int i=0; i<width*height*channels; i++){ printf("%d::",(int)(pixels[i])); } }Den letzten for-loop habe ich mal zu Testzwecken da reingesetzt. Das was ich als Ausgabe bekomme sind richtige Werte für die ersten paar Pixel, nach ca 100Pixeln scheint jedoch nur noch 205 ausgelesen zu werden. Ich habe das gleiche Bild mit einem anderen Programm geladen bei dem der Code zum Laden gleich ist und da funktioniert es. Ich kann die Datei auch zu RAW umbenennen und sie in einem Grafikprogramm öffnen - auch hier ist nichts zu sehen vom 205er Grauton. Es liegt also offenbar nicht an der Datei, dass es nicht funktioniert.
Hat jemand eine Idee wo das Problem liegen könnte? Kommt mir gerade echt komisch vor.
Gruß
cman
-
Wie ist denn der Rückgabewert von fread?
-
Der Rückgabewert ist 241, aber sollte 100000 sein, da das Bild 4 Kanäle hat, und 125x200 pixel groß ist. feof(f) ist true, also glaubt er sich am Ende der Datei zu befinden.
Lasse ich mir allerdings die aktuelle Position ausgeben, kommt dabei 4096 raus, was ich partout nicht nachvollziehen kann. Der Header ist 30bytes groß, danach folgen schon die pixelinformationen und zum schluss noch anderer Kram. Die Datei ist insgesamt 100047bytes groß(kommt rechnerisch hin und wird auch so vom OS angezeigt). Wenn ich am Ende der Datei bin, sollte man doch erwarten, dass ich diesen Wert erhalte, wenn ich ftell(f) aufrufe.Ich versteh es nicht. Noch eine Idee?
EDIT:
Ich habe jetzt mal die Daten abgeändert(andere Pixeldaten, gleiche Größe), jetzt wird 73 zurückgegeben. Seltsam ist, dass ftell(f) immernoch 4096 ausspuckt, obwohl ja angeblich weniger gelesen werden konnte.
-
Ist die Datei im Binärmodus geöffnet? Was steht denn in der Datei an der Stelle?
-
Oh, ich Trottel...hatte die Datei einfach mit "r" geöffnet. Habe ich irgendwie an der falschen Stelle versucht den Fehler zu finden. Thread kann geschlossen werden. Danke Fellhuhn

-
Mach am besten aus
// assumes f is opened for reading
gleich
// assumes f is opened for binary readingNur für die Zukunft.
