Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

02.10.2013, 18:48

Tiff -> Byte-Buffer

Hallo,

ich sitze z.Z. an einer Anwendung, die mal per Corba Tiff-Bilder übertragen soll. Am einfachsten ist es da wahrscheinlich, einfach die Bitrepräsentation zu übertragen, aber wie komme ich von einem Tiff-Bild zu einem Byte-Buffer?

In libtiff gibts eine Utility-Funktion, mit der man anstatt einer tif-Datei in einen ostream schreiben kann, aber wie man von diesem möglichst elegant zu einem byte-Buffer kommt, hab ich in der ganzen IOStream-Hölle noch nicht rausgefunden. Brute Force ist z.Z. ostream.str().c_str(), aber uneleganter gehts wohl kaum noch. Oder hat jemand noch ne viel bessere Idee, was das Gesamtkonzept angeht?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

02.10.2013, 19:40

Wieso ist es unelegant, einfach die Datei zu übertragen? Ist der einfachste Weg.

3

03.10.2013, 15:38

Sofern das geht, ist es mit Sicherheit nicht unelegant. Das Problem bei Corba ist, dass zur Übertragung bzw. einem Remote-Procedure-Call alles in Corba-fähigen Datentypen vorliegen muss und ich dachte, der direkte Weg endet dann damit, dass man alles, was man in das Tiff reinschreibt, erst mal "in Corba übersetzen" und auf der anderen Seite wieder zurückübersetzen muss.
Die Datei direkt übertragen heißt doch im Prinzip auch nichts anderes, als das Memory-Image zu übertragen, oder welchen Weg gibt es dazwischen noch?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

03.10.2013, 16:13

Nicht das Memory-Image, sondern das File wie es ist.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

5

03.10.2013, 17:37

Es muss aber irgendwie in einem corba-konformen Datentypen stecken, und das kann nur so Basics wie long, float, structs, arrays und Vektoren. Ob das also einfacher ist, geschweige denn überhaupt möglich ist, anstatt die binäre Repräsentation zu nehmen, weiß ich jetzt nicht. ;)

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

6

03.10.2013, 18:09

Wieso nicht einfach ein Bytearray?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

03.10.2013, 21:19

Es muss aber irgendwie in einem corba-konformen Datentypen stecken, und das kann nur so Basics wie long, float, structs, arrays und Vektoren. Ob das also einfacher ist, geschweige denn überhaupt möglich ist, anstatt die binäre Repräsentation zu nehmen, weiß ich jetzt nicht. ;)

Was ist eine Datei denn anderes als ein Array von Bytes?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

8

03.10.2013, 21:41

Naja, exakt das hab ich ja eigentlich vor, ich weiß nur nicht, wie ich aus dem normalen Zyklus:

1. TIFF* TiffOpen("bla.tif", "w");
2. schreiben
3. TiffClose(tif)

an ebendiese Byte-Repräsentation komme, ohne, anstatt in ein file, direkt in einen Byte-Buffer zu schreiben.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

9

03.10.2013, 21:49

Zitat

ein file, direkt in einen Byte-Buffer zu schreiben.

Wieso machst du das nicht einfach?

Die Tiff-Bibliothek brauchst du nur, wenn du die Daten irgendwie verarbeiten willst.
Das willst du aber so wie ich das verstanden habe, gar nicht.
Du willst doch nur die Daten bzw. Dateien übertragen unabhänig davon wie sie genau aufgebaut sind.

10

04.10.2013, 10:40

Das habe ich doch, siehe mein Eingangspost, aber David und Cobold reden ja anscheinend von einer anderen, leichteren Variante. Deshalb hatte ich ja auch gefragt, wie ich von einem ostream (denn darin schreibt diese Tiff-Utility-Funktion) an den Byte-Buffer komme, ohne ihn über ostream.str().c_str() 2-fach temporär zu kopieren.

Um das noch weiter aufzuklären:

Es ist so, dass ich ein bestehendes Projekt erweitern will. Das schreibt alle seine Daten ganz normal über libtiff in Dateien und speichert/lädt sie auf/von der HDD. Ich will dazwischen jetzt einen RPC über Corba einbauen, damit die Datei vor der lokalen Speicherung noch auf einen anderen Rechner übertragen und dort gespeichert wird.
Das Tiff selbst kann ich jetzt nicht so ohne weiteres übertragen, weil Corba diesen Datentypen nicht kennt. D.h. ich muss es entweder in eine rohe Bitsequenz bekommen oder eben die ganze Tiff-Struktur aufdröseln bis auf die basic types und diese dann in Corba-Äquivalente übersetzen. Deshalb bin ich zu dem Schluss gekommen, dass die erste Methode am einfachsten ist.

Werbeanzeige