diff --git a/packages/fcl-image/src/fpimage.inc b/packages/fcl-image/src/fpimage.inc index 97a7196340..11970ad9e7 100644 --- a/packages/fcl-image/src/fpimage.inc +++ b/packages/fcl-image/src/fpimage.inc @@ -290,6 +290,32 @@ begin Result := nil; end; +class function TFPCustomImage.FindHandlerFromStream(Str: TStream): TIHData; +var r : integer; + p: Int64; + reader: TFPCustomImageReader; +begin + r := ImageHandlers.Count-1; + p := Str.Position; + while (r >= 0) do + begin + Result := ImageHandlers.GetData(r); + if Result.Reader<>nil then + begin + reader := Result.Reader.Create; + try + if reader.CheckContents(Str) then + Exit; + finally + reader.free; + Str.Position := p; + end; + end; + dec (r); + end; + Result := nil; +end; + class function TFPCustomImage.FindReaderFromExtension(const extension: String ): TFPCustomImageReaderClass; var d : TIHData; @@ -307,6 +333,17 @@ begin Result := FindReaderFromExtension(ExtractFileExt(filename)); end; +class function TFPCustomImage.FindReaderFromStream( + Str: TStream): TFPCustomImageReaderClass; +var d : TIHData; +begin + d := FindHandlerFromStream(Str); + if d<>nil then + Result := d.FReader + else + Result := nil; +end; + class function TFPCustomImage.FindWriterFromExtension(const extension: String ): TFPCustomImageWriterClass; var d : TIHData; diff --git a/packages/fcl-image/src/fpimage.pp b/packages/fcl-image/src/fpimage.pp index add6d2e4a1..988de7302a 100644 --- a/packages/fcl-image/src/fpimage.pp +++ b/packages/fcl-image/src/fpimage.pp @@ -129,6 +129,8 @@ type destructor destroy; override; procedure Assign(Source: TPersistent); override; // Image handlers + class function FindHandlerFromStream(Str:TStream): TIHData; + class function FindReaderFromStream(Str:TStream): TFPCustomImageReaderClass; class function FindHandlerFromExtension(extension:String): TIHData; class function FindReaderFromFileName(const filename:String): TFPCustomImageReaderClass; class function FindReaderFromExtension(const extension:String): TFPCustomImageReaderClass;