Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Grafik / Sound / Multimedia (https://www.delphipraxis.net/21-library-grafik-sound-multimedia/)
-   -   Delphi Prüfen, ob Datei ein PNG ist (https://www.delphipraxis.net/75927-pruefen-ob-datei-ein-png-ist.html)

CalganX 27. Aug 2006 13:16


Prüfen, ob Datei ein PNG ist
 
Von Hador kommt folgende Funktion, um zu prüfen, ob eine angegebene Datei ein PNG-Bild ist:

Delphi-Quellcode:
function IsPNG(const AFileName: String): Boolean;
var
  FileHandle: Integer;
  Buffer: array[0..2] of Byte;
begin
  FileHandle := FileOpen(AFileName, fmOpenRead);
  FileSeek(FileHandle, 1, 0);
  FileRead(FileHandle, Buffer, 3);
  FileClose(FileHandle);
  Result := (Buffer[0] = $50) and (Buffer[1] = $4E) and (Buffer[2] = $47);
end;

Hador 27. Aug 2006 13:48

Re: Prüfen, ob Datei ein PNG ist
 
Zitat:

Zitat von xaromz
ist die Prüfung der ersten drei Zeichen nicht ein bisschen wenig? Das kann auch in einer Textdatei stehen.
Abgesehen davon steht in PNGs am Anfang erst $89, bevor "PNG" kommt. Zumindest das könnte man checken.
Besser wäre es aber, den gesamten Header zu lesen und aud Plausibilität zu prüfen,.

Jo man könnte ohne Probleme genauer Prüfen:

Delphi-Quellcode:
function IsPNG(const AFileName: String): Boolean;
var
  FileHandle: Integer;
  Buf: Int64;
begin
  FileHandle := FileOpen(AFileName, fmOpenRead);
  FileSeek(FileHandle, 0, 0);
  FileRead(FileHandle, Buf, 8);
  FileClose(FileHandle);
  Result := (Buf = $0A1A0A0D474E5089);
end;
Achtung! Ich hab die Funktion nicht getestet, da ich grad kein PNG sowie Delphi zur Hand habe.
Sollte aber eigentlich funktionieren

Die Wahrscheinlichkeit, dass die ersten 8 Byte zufällig identisch sind sind schon sehr gering. Und dazu kommt ja auch noch die Prüfung der Dateiendung.

EDIT:
Ich hatte doch noch 'n Feher drin. So funktioniert sie aber.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:39 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