Da ich ja immer wieder Infos aus neue Dateitypen lesen möchte, habe ich auch schon daran gedacht, dies als Plugin zu machen. Wie, weiß ich noch nicht. Aber das ist ja die 2. Anlaufstelle. Erst mal muss ich ja einen Datei-Header richtig lesen können. Dafür braucht man Dokumentationen und natürlich "das können"
Ich scheitere schon beim NEF-Format.
Es baut ja auf TIFF auf aber für mich ist das alles noch nicht so einfach.
Ich muss ja von (
http://lclevy.free.fr/nef/) den Abschnitt "4.2 IFD#0, subIFD#1" lesen. Aber schaffe nur den Abschnitt "3. IFD#0" … was mir ein wenig klarer erscheint durch eine TIFF-Dokumentation.
Jedenfalls lese ich die Anzahl Tags und in der For-Schleife immer 12 Bytes. So kann hier der Abschnitt "3. IFD#0" gelesen werden.
Hier mal bissl Code. Bin ein wenig am herumprobieren aber hier mal das Zeugs für den normalen IFD Abschnitt. Den eigentlichen Aufbau habe ich im Netz gefunden und probiere gerade herum.
Code:
Type
TTifHeader = Record
Signature : Word;
Version : Word;
IFD : DWord;
End;
TIDF_Field = Record
Tag : Word;
FieldType : Word;
ValCount : DWord;
ValOffset : DWord;
End;
VAR
TifFile : TFileStream;
Header : tTifHeader;
DirEntries : Word;
Field : TIDF_Field;
Cnt : Integer;
TifFile := TFileStream.Create (sFileName, fmOpenRead);
Try
TifFile.Read ( Header,8);
// Prüfen auf TIFF Format (Ist bei NEF gleich)
If ((Header.Signature = $04949) And (Header.Version = $0002A)) Or
((Header.Signature = $04D4D) And (Header.Version = $02A00)) Then
Begin
TifFile.Position := Header.IFD;
TifFile.Read ( DirEntries, 2 ); // Anzahl Tags im ersten IFD
For Cnt := 1 To DirEntries Do
Begin
TifFile.Read (Field,12);
Case Field.Tag OF
$0100 : iWidth := Field.ValOffset;
$0101 : iHeight := Field.ValOffset;
// 34665 : Break;
End;
// If (iWidth<>0) and (iHeight<>0) Then Break;
End;
End;
Finally
FreeAndNil ( TifFile );
End;