|
@@ -64,6 +64,7 @@ type
|
|
protected
|
|
protected
|
|
procedure InternalRead(Str: TStream; Img: TFPCustomImage); override;
|
|
procedure InternalRead(Str: TStream; Img: TFPCustomImage); override;
|
|
function InternalCheck(Str: TStream): boolean; override;
|
|
function InternalCheck(Str: TStream): boolean; override;
|
|
|
|
+ function InternalSize(Str:TStream): TPoint; override;
|
|
public
|
|
public
|
|
constructor Create; override;
|
|
constructor Create; override;
|
|
destructor Destroy; override;
|
|
destructor Destroy; override;
|
|
@@ -450,6 +451,38 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+function TFPReaderJPEG.InternalSize(Str: TStream): TPoint;
|
|
|
|
+var
|
|
|
|
+ JInfo: jpeg_decompress_struct;
|
|
|
|
+ JError: jpeg_error_mgr;
|
|
|
|
+
|
|
|
|
+ procedure SetSource;
|
|
|
|
+ begin
|
|
|
|
+ jpeg_stdio_src(@JInfo, @Str);
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+ procedure ReadHeader;
|
|
|
|
+ begin
|
|
|
|
+ jpeg_read_header(@JInfo, TRUE);
|
|
|
|
+ Result.X := JInfo.image_width;
|
|
|
|
+ Result.Y := JInfo.image_height;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+begin
|
|
|
|
+ FillChar(JInfo,SizeOf(JInfo),0);
|
|
|
|
+ if Str.Position < Str.Size then begin
|
|
|
|
+ JError:=jpeg_std_error;
|
|
|
|
+ JInfo.err := @JError;
|
|
|
|
+ jpeg_CreateDecompress(@JInfo, JPEG_LIB_VERSION, SizeOf(JInfo));
|
|
|
|
+ try
|
|
|
|
+ SetSource;
|
|
|
|
+ ReadHeader;
|
|
|
|
+ finally
|
|
|
|
+ jpeg_Destroy_Decompress(@JInfo);
|
|
|
|
+ end;
|
|
|
|
+ end;
|
|
|
|
+end;
|
|
|
|
+
|
|
function TFPReaderJPEG.InternalCheck(Str: TStream): boolean;
|
|
function TFPReaderJPEG.InternalCheck(Str: TStream): boolean;
|
|
var
|
|
var
|
|
Buf: array[0..1] of Byte = (0, 0);
|
|
Buf: array[0..1] of Byte = (0, 0);
|