Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » fstream - Dateizeiger positionieren?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
10.11.2015, 02:39 Uhr
Yadgar



Hi(gh)!

Ich habe vor, aus einem unkomprimierten TGA-File Farbwerte von Pixeln auszulesen und in ein zweidimensionales Array zu überführen. Um den TGA-Header überspringen (bzw. lediglich die Daten zu den Seitenlängen auslesen und dann an den Anfang der eigentlichen Bilddaten springen) zu können, müsste ich den Dateizeiger irgendwie positionieren...

In reinem C wäre es einfach (fseek), aber da ich zum Zurückschreiben der (bearbeiteten, aber darum geht es im Moment noch gar nicht) Farbdaten gerne die praktische fstream-Notation nutzen würde, sollte es schon richtiges C++ sein...

Wie stelle ich das an?

(an dieser Stelle: bitte keinen Hinweis auf die Dokumentation von fstream in der C++ Reference - ich habe mir das angesehen und verstehe nur Bahnhof...)

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.11.2015, 16:34 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,

es gibt auch einen seek-soundso-member,

hier glaub ich ist ne kurze erklärung für:

http://stackoverflow.com/questions/15670359/fstream-seekg-seekp-and-write
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.11.2015, 17:20 Uhr
ao

(Operator)



Zitat von Yadgar:
Wie stelle ich das an?

mit seekg, etwa so:

fstream tgaFile ("filename.tga");
tgaFile.seekg (sizeof (TGAHeader));


Zitat:
(an dieser Stelle: bitte keinen Hinweis auf die Dokumentation von fstream in der C++ Reference - ich habe mir das angesehen und verstehe nur Bahnhof...)

Warum verstehst du nur Bahnhof? Reicht dein Englisch nicht, oder liegts an was anderem? Die Referenz-Doku ist nicht immer einfach zu verstehen, aber daran solltest du arbeiten, wenn du Programmierer sein willst.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.11.2015, 10:01 Uhr
ao

(Operator)



Zitat von Yadgar:
Um den TGA-Header überspringen ...

da ich zum Zurückschreiben der Farbdaten gerne die praktische fstream-Notation nutzen würde ...

Ich möchte diesen Ansatz mal ein bisschen in Frage stellen.

1. Was spricht dagegen, im ersten Schritt das ganze TGA-File inklusive Header in den Speicher zu holen? Das macht seekg überflüssig, und es ist immer einfacher, sich im Speicher zu bewegen als auf Dateien.

2. fstream beherrscht Schreiben und Lesen und ist daher ein vergleichsweise kompliziertes Objekt. Wenn du die Aufgabe so auf einzelne Schritte runterbrechen kannst, dass du zuerst die ganze Datei einliest, dann die Daten im RAM bearbeitest und am Ende alles zurückschreibst, dann kannst du die wesentlich schlankeren Implementierungen ifstream und ofstream benutzen.

Vorteile davon:
a. Der Code wird modularer. Du kannst für die Teilaufgaben "Datei lesen" und "Datei schreiben" wiederverwendbare Bausteine programmieren. Wenn alles miteinander verzahnt ist, ist das nur schwer möglich.

b. Jede Teilaufgabe fordert nur die Rechte und Resourcen an, die sie zur Erledigung braucht. Die Leseroutine muss z.B. keinen Schreibzugriff auf die Datei haben, d.h. sie wird auch auf Read-Only-Medien und geschützten Dateien funktionieren.

c. Die Bearbeitung der Pixeldaten findet komplett im Speicher statt, deshalb muss währenddessen überhaupt keine Datei geöffnet sein. Es ist "nett", Ressourcen nur so lange zu belegen, wie sie tatsächlich gebraucht werden.

Mir fällt nur ein Szenario ein, das ein Design wie deins notwendig machen würde: Blockverarbeitung. Wenn die Pixeldaten blöckchenweise durchgeschleust werden müssen, entweder weil die Software mit wenig Speicher auskommen muss oder weil die zu verarbeitenden Bilder extrem groß sind oder weil sie gar nicht als Dateien vorliegen, sondern als Datenströme über Netzwerk o.ä. rein- und rausgehen. Solche "Schmerzen" sollte man sich aber nur zufügen, wenn es sein muss.

Dieser Post wurde am 11.11.2015 um 10:03 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.12.2015, 22:08 Uhr
Yadgar



Hi(gh)!


Zitat von ao:

Warum verstehst du nur Bahnhof? Reicht dein Englisch nicht, oder liegts an was anderem? Die Referenz-Doku ist nicht immer einfach zu verstehen, aber daran solltest du arbeiten, wenn du Programmierer sein willst.


Also, eigentlich will ich ja alles auf einmal sein - Programmierer, langhaariger Landkommunarde (in Afghanistan natürlich!), Astronom, Komponist, jahrzehntelang um die Welt globetrottender Fahrradnomade, Hammond-Virtuose, Elektroniktüftler, Kartograph, Videokünstler und so ganz nebenbei auch noch meinen ganz normalen Alltag schmeißen...

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: