TGA-Loader
-
Tembudrus schrieb:
Hat jemand eine Idee wie sich jedes char* Element in eine integer-Zahl umrechnen ließe?
Warum nimmst du nicht einen std::vector in den du alles zusammen reinpackst, d.h. den ganzen Dateininhalt? Und std::fstreams für die streams, dann wirds recht einfach, den kompletten Inhalt in einem Rutsch in den vctor zu packen, ohne großartige C-Style buffer-Fummeleien wie du sie hast. An Stelle eines char-vectors kannst du dann eventuell gleich ints aus der Datei rauslesen, je nachdem wie die genau aufgebaut ist.
-
Ich hatte erst vor fstream zu nutzen, mir war aber nicht klar, wie ich mit fstream eine Datei in Blöcke von 1 byte aufspalten kann und dann jeden Block also jedes Byte in ein Vektorelement schreibe.
Achja: Mir ist das immernoch nicht klar

-
Tembudrus schrieb:
Ich hatte erst vor fstream zu nutzen, mir war aber nicht klar, wie ich mit fstream eine Datei in Blöcke von 1 byte aufspalten kann und dann jeden Block also jedes Byte in ein Vektorelement schreibe.
Warum solltest du das tun wollen?
-
weil jedes byte einen grauwert symbolisiert und genau die will ich haben.
-
Tip: unsigned char hat die Größe 1 byte

-
?! wenn ich meine Datei einlese und mir z.B mit cout das 50te Element des Buffers ausgeben lasse, so erhalte ich nix bzw die Sonderzeichen, denen das Element in ascii gerade entspricht. Das will ich aber nicht. Das Byte stellt ja keinen Text sondern einen Wert da. Wenn ich irgendwie den Wert erfahren kann, den das Byte repräsentiert, so bin ich vollends zufrieden.
-
Tembudrus schrieb:
?! wenn ich meine Datei einlese und mir z.B mit cout das 50te Element des Buffers ausgeben lasse, so erhalte ich nix bzw die Sonderzeichen, denen das Element in ascii gerade entspricht. Das will ich aber nicht. Das Byte stellt ja keinen Text sondern einen Wert da. Wenn ich irgendwie den Wert erfahren kann, den das Byte repräsentiert, so bin ich vollends zufrieden.
Du lässt dir also binäre Daten als Text anzeigen und bist mit dem Ergebnis nicht zufrieden. Was hast du denn erwartet?
std::cout << int(buffer[49]);Gefällt dir dieses Ergebnis besser?
-
Das liegt daran dass du chars im buffer hast und der compiler, wenn du sie an einen Stream übergibst, bei char automatisch annimmt dass es sich um ein Zeichen handelt - also gibt er auch die Zeichendarstellung aus. Wenn du es als Zahlenwert haben möchtest musst du es vorher in einen Zahlenwert casten, z.B. per static_cast<short>.
Intern ist das wurscht, es ist nur die Ausgabe die du nicht richtig gemacht hast.
-
Oh super!!! Vielen Dank!! Es funktioniert!
-
So langsam bekomme ich nen Krampf.
Ich definiere mir einen Vektor mit int Einträgen und initialisiere diesen mittels einer void Funktion. Nun will ich zwei Einträge aus dem vektor auslesen und an andere Integerwerte übergeben. Das ganze Sieht so aus:
vector <int> vi_header[9]; header_build(filename, buffer, vi_header[9]); int heigh, width; heigh = vi_header[7]; width = vi_header[6];Nun erhalte ich folgende Fehlermeldung:
tga_gray_load.h(75) : error C2440: '=': 'std::vector<_Ty>' kann nicht in 'int' konvertiert werden
1> with
1> [
1> _Ty=int
1> ]
1> Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werdenWas soll mir das denn nun schon wieder sagen? wieso kann ich denn nicht einfache intwerte aus dem Vektor auslesen?
-
Tembudrus schrieb:
vector <int> vi_header[9];Das ist ein array aus 9 vectoren. Soll vermutlich so aussehen:
vector <int> vi_header(9);
-
Vielen Dank nochmals für all eure Hilfe, cih stehe kurz vor dem Abschluss des Projektes. Um nun auch die Ergebnisse ansehen zu können, möchte ich meine Daten in Bildern festhalten. dazu muss ich mir bitmaps erstellen. Der Grudsätzlich Aufbau einer Bitmap ist mir klar. Was ich aber nicht schaffe ist es in meiner Datei, möge sie "Test.bmp" heißen, den einzelnen bytes die richtigen Werte zuzuordnen.
Angenommen ich möchte das erste Byte auf den Wert 118 setzen. Weiß jemand wie ich dieses schaffe?
-
So:
std::ofstream stream( "test.bmp", std::ios::binary | std::ios::out ); stream.put( 118 ); stream.close();
-
vector <unsigned char> data_bytes;
ist der datentyp den du willst, wenn du byteweise auf die daten zugreifen willst.
das mal so am rande.
mfg