* Patch from Ondrej Pokorny to implement Find(Handler|reader)FromStream (bug ID 33955)

git-svn-id: trunk@39416 -
This commit is contained in:
michael 2018-07-09 11:28:15 +00:00
parent ed4b94706b
commit 5213011bed
2 changed files with 39 additions and 0 deletions

View File

@ -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;

View File

@ -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;