Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Bild scannen und als Tiff speichern

  Alt 29. Dez 2005, 23:02
Hi,
ich habe mich mal etwas mit Tiff beschäftigt und die 6.0 Spezifikation implementiert (brauchte eine Komponente um auch mit 16-Bit Graustufen bzw. 48-Bit Farbe umzugehen). Diese Implementierung kann ich dir leider nicht zur Verfügung stellen, da ich keine Rechte an ihr habe (die hat mein Arbeitgeber).

Aber ich kann dir gerne bei Fragen weiter helfen. Müsstest dann natürlich etwas genauer sagen, woran es im Moment scheitert bzw. was du schon fertig hast.
An sich ist der von dir gezeigte Aufbau korrekt. Trotzdem gibt es ein paar Kleinigkeiten zu beachten, damit ein Tiff korrekt angezeigt wird. So benötigt IrfanView unbedingt eine gültige X- und YResolution, Photoshop brauchte eine PhotometricInterpretation (denke war das Feld). Also sollte ein Tiff mal von einem Programm nicht angezeigt werden, schau einfach mal, ob du alle Pflichtfelder gesetzt hast (und welche das Programm selbst setzt). Häufig scheitert es wirklich nur daran.

Da ich die LibTiff nicht wirklich kenne (die unterstützte keine 16-Bit Layer), weiß ich nicht was du da schon hast (oder eben nicht). Wenn du nichts all zu komplexes machst (also z.B. erstmal feste Byteorder, feste Pixelrate,...) dann kannst du ein einfaches Grundgerüst sehr leicht auch selbst erstellen.
Adobe hat eine ganz gute Doku/Spezifikation die sehr hilfreich ist.

Der Aufbau ist wirklich einfach, du startest mit einem Header, der enthält die ByteOrder (Little (II) oder Big Endian (MM)) benannt nach dem jeweiligen größten Vertreter (II = Intel, MM = Motorola). Dem folgt die Tiff-Identifikationsnummer 42 (oder war's Hex 42?) und dann der Offset zum ersten IFD (Tiff ist da sehr flexibel).
Auch der Aufbau eines IFDs ist an sich immer sehr einfach. Du sagst nur, wie viele Felder das IFD hat, dann kommen die Tags und zum Schluss der Offset zum nächsten IFD (0 wenn Letztes).
Ein Tag besteht wiederum aus mehreren Teilen.
Du hast erstmal eine Nummer, die das Tag identifiziert, dann kam der Datentyp, die Anzahl (Reihenfolge nachlesen) und zum Schluß der Wert. Sollte ein Wert (die Werte) zusammen (für den jeweiligen Datentypen) größer als 32 Bit sein, steht statt dem Wert ein Zeiger auf die Daten (das Datum).

Das war's eigentlich schon (sehr grob). Wenn du schon Tiffs erstellst, die nur nicht angezeigt werden, poste einfach eins und ich würde es mir anschauen. Falls du sonst irgendwelche fragen hast, vielleicht kann ich dir helfen (ist zwar schon wieder ein klein wenig her, aber auch nicht so ewig).

Gruß Der Unwissende
  Mit Zitat antworten Zitat