Forum: Datenbanken
by himitsu,
1. Sep 2023
Das Casten der TSignature war ja nur, weil ich es in einem Byte gespeichert hab.
Im Record kannst da den richtigen Typ benutzen.
Bei DatenRecords erstelle ich mir gern einen/mehrere Constuctor, um sie direkt einzeilig füllen zu können, auch direkt an Varioable/Property/Parameter übergebbar.
Quasi TRect.Create anstatt einer externen Funktion ala Rect, bzw. TPoint.Create und Point.
Schön wäre...
Forum: Datenbanken
by himitsu,
31. Aug 2023
Mist ... hast Recht.
Offset 6 ... falsch gelesen.
also eigentlich (Ord(TImageFormat.JPEG), 8, $FF, $D8, $FF, $E1, 0, 0, $45, $78)
joar dann muß man das Ganze noch um eine Maske (AND) erweitern, um die zwischenliegenden FüllBytes "ignorieren" zu können
(Ord(TImageFormat.JPEG), {Len} 8, {Daten} $FF, $D8, $FF, $E1, 0, 0, $45, $78, {Maske} $FF, $FF, $FF, $FF, 0, 0, $FF, $FF)
oder um eine...
Forum: Datenbanken
by himitsu,
31. Aug 2023
Ja, damit die Signatur bei beginnt :lol:
bei die eigentliche Länge (ohne die Nullen)
und auf das Format (hab mir ersparrt das mit einem Record-Array zu bauen (array of record Format: TImageFormat; Len: Integer; Signature: array of Byte; end;)
Vor allem, da Record-Konstanten sinnlos pervers hässlich sind.
Aber ginge auch mit array, also das Format, die Länge und ab die Signatur.
...
Forum: Datenbanken
by himitsu,
31. Aug 2023
Wie oft kommt es denn vor, dass diese Prüfung 2 Millionen Mal pro Sekunde ausführen muß, um es nötig zu haben, das noch zu optimieren?
{$SCOPEDENUMS ON}
type TImageFormat = (Unknown, BMP, GIF87a, TIFF, JPEG, PNG, ICO);
{$POINTERMATH ON}
function GetBytesFormat(const AData: TBytes): TImageFormat;
var
Signature: LongWord;
begin
Forum: Datenbanken
by himitsu,
31. Aug 2023
meinte nicht dich ... war auf die Entwickler bei Emba bezogen, weil die zwanghaft immer jeden Dreck verstecken müssen und sich regelrecht weigern etwas öffentlich zugänglich zu machen. :wall:
Forum: Datenbanken
by himitsu,
31. Aug 2023
Boar eh ... immer und immer wieder ... die sollem mal richtige Entwickler einstellen, die ihr eigenes Produckt selber benutzen.
Du kannst dich aber selber an jedes einzelne ImageFormat wenden und es fragen,
TGraphic.CanLoadFromStream
also TBitmap.CanLoadFromStream, TPngImage.CanLoadFromStream, TJPEGImage.CanLoadFromStream usw.
Ein GetFileFormats.FindFormat wäre natürlich einfacher, aber...
Forum: Datenbanken
by himitsu,
31. Aug 2023
FILE ist opensource ... könnte/kann man auch für Windows bereitstellen.
Da werden nicht nur diese MagicBytes (die ersten 1-4 Bytes) beachtet.
Wenn es um Bilder geht, dann kann TPicture.LoadFromStream das inszwischen auch, für bei ihm registrierte Formate.
Ganz früher hatte nur LoadFromFile auf die Dateiendung geachtet, aber seit 'ner Weile macht das LoadFromStream, über einige MagicBytes....