.raw format verstehen
-
Hallo ich hätte eine Anfängerfrage. Ich versuche gerade (da bestimmte Daten in dem Format vorliegen) .raw Dateien einzulesen. Dabei versteh ich aber etwas Grundsätzliches wohl falsch, komme aber nicht darauf was. Ich habe mir einfach zum probieren mit PS eine .raw Datei gemacht, in der ich 10 Pixel mit schwarz und Grauwerten belegt habe. Beim einlesen der Datei erwarte ich 10 abgelegte Werte zwischen 0 und 1 in der Datei, bekomme aber ganz abstruse Werte. Gemacht habe ich folgendes:
#include <cstdio> #include <iostream> using namespace std; int main () { FILE * pFile = fopen("Test.raw", "rb"); float* data; if (pFile == NULL) { std::cout << "Error: Can't open file " << "Test.raw" << "\n"; exit(1); } data = (float*) malloc(sizeof(float) * 10); if (data == NULL) {std::cout << "Memory error\n"; exit (2);} fread(data, sizeof(float), 10, pFile); for(int i=0; i<10; i++) { cout << data[i] << endl; } return 0; }Kann mir vielleicht jemand sagen was ich nicht verstehe? Vielen Dank!
-
Warum einen float? Ich nehme mal an das die RGB-Werte wie bei Bitmaps und TGAs auch ein Byte (unsigned char) groß sind.
EDIT:
Warum malloc? Warum Float-Zeiger?
-
Na ja ich dachte ich öffne eine Datei und stelle ein array bereit in das mir die Werte abgelegt werden. Einfach nur um die Werte mal irgendwie einlesen zu können. Wieso was würdest Du stattdessen tun?
Wenn ich unsigned int statt float nehme kommen auch unmöglich hohe Werte aus der Datei. Bsp. bei float was mit 4.0E08 bei unsigned int 3452816845. Ich würde halt entweder wie gesagt Zahlen [0,1] bzw. [0,255] erwarten. Von daher gehe ich davon aus das ich einmal nicht genau verstehe wie so eine .raw Datei aussieht und/bzw. wie ich sie richtig auslese. Leider finde ich im Netz nichts allgemeines über dieses Format.
-
#include <cstdio> #include <iostream> using namespace std; int main () { FILE * pFile = fopen("Test.raw", "rb"); unsigned char RGBBuffer[9]; if (pFile == NULL) { std::cout << "Error: Can't open file " << "Test.raw" << "\n"; fclose(File); } fread(&RGBBuffer, 1, 9, pFile); for(int i = 0; i != 9; i++) { cout << RGBBuffer[i] << endl; } }(ungetestet)
-
am besten du verwendest TGA.
-
guschundTGA schrieb:
am besten du verwendest TGA.
Warum sollte er?
-
Es gibt KEIN einheitliches RAW-Format (s.a. http://de.wikipedia.org/wiki/Rohdatenformat_%28Fotografie%29), d.h. dies ist Herstellerabhängig!
Und auf jeden Fall hat eine RAW-Datei auch einen Header, der ersteinmal eingelesen werden muß (mindesten die Größe und Farbtiefe des Bildes muß ja irgendwo abgespeichert sein).
-
Danke für Dein Codesnipped, aber die Ausgabe ist: W " - - " ú 6 <<
Nicht ganz das mit dem ich was anfangen kann.
@guschundTGA
ich muss leider verstehen wie ich die Daten aus .raw rauskriege, da die Dateien aus einem experimentellen Aufbau heraus so geschrieben werden und mir je nach grauwert eben bestimmte Werte codieren.
-
Ja, die RGB-Werte müssten direkt am Anfang stehen. Entscheide dich einfach für ein RAW-Format (Gibt ja anscheinend nicht nur eins).