AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Dateiinfos lesen (schnellste Variante?)
Thema durchsuchen
Ansicht
Themen-Optionen

Dateiinfos lesen (schnellste Variante?)

Ein Thema von MicMic · begonnen am 27. Jan 2020 · letzter Beitrag vom 31. Jan 2020
 
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: Dateiinfos lesen (schnellste Variante?)

  Alt 28. Jan 2020, 22:56
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;
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz