|
@@ -33,9 +33,9 @@ unit FPReadBMP;
|
|
interface
|
|
interface
|
|
|
|
|
|
{$IFDEF FPC_DOTTEDUNITS}
|
|
{$IFDEF FPC_DOTTEDUNITS}
|
|
-uses FpImage, System.Classes, System.SysUtils, FpImage.Common.Bitmap;
|
|
|
|
|
|
+uses FpImage, System.Types, System.Classes, System.SysUtils, FpImage.Common.Bitmap;
|
|
{$ELSE FPC_DOTTEDUNITS}
|
|
{$ELSE FPC_DOTTEDUNITS}
|
|
-uses FpImage, classes, sysutils, BMPcomn;
|
|
|
|
|
|
+uses FpImage, types, classes, sysutils, BMPcomn;
|
|
{$ENDIF FPC_DOTTEDUNITS}
|
|
{$ENDIF FPC_DOTTEDUNITS}
|
|
|
|
|
|
type
|
|
type
|
|
@@ -68,6 +68,7 @@ type
|
|
// required by TFPCustomImageReader
|
|
// required by TFPCustomImageReader
|
|
procedure InternalRead (Stream:TStream; Img:TFPCustomImage); override;
|
|
procedure InternalRead (Stream:TStream; Img:TFPCustomImage); override;
|
|
function InternalCheck (Stream:TStream) : boolean; override;
|
|
function InternalCheck (Stream:TStream) : boolean; override;
|
|
|
|
+ class function InternalSize (Stream:TStream) : TPoint; override;
|
|
public
|
|
public
|
|
constructor Create; override;
|
|
constructor Create; override;
|
|
destructor Destroy; override;
|
|
destructor Destroy; override;
|
|
@@ -516,6 +517,32 @@ begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+class function TFPReaderBMP.InternalSize (Stream: TStream): TPoint;
|
|
|
|
+var
|
|
|
|
+ fileHdr: TBitmapFileHeader;
|
|
|
|
+ infoHdr: TBitmapInfoHeader;
|
|
|
|
+ n: Int64;
|
|
|
|
+ StartPos: Int64;
|
|
|
|
+begin
|
|
|
|
+ Result := Point(0, 0);
|
|
|
|
+
|
|
|
|
+ StartPos := Stream.Position;
|
|
|
|
+ try
|
|
|
|
+ n := Stream.Read(fileHdr, SizeOf(fileHdr));
|
|
|
|
+ if n <> SizeOf(fileHdr) then exit;
|
|
|
|
+ if {$IFDEF ENDIAN_BIG}swap(fileHdr.bfType){$ELSE}fileHdr.bfType{$ENDIF} <> BMmagic then exit;
|
|
|
|
+ n := Stream.Read(infoHdr, SizeOf(infoHdr));
|
|
|
|
+ if n <> SizeOf(infoHdr) then exit;
|
|
|
|
+ {$IFDEF ENDIAN_BIG}
|
|
|
|
+ Result := Point(swap(infoHdr.Width), swap(infoHdr.Height));
|
|
|
|
+ {$ELSE}
|
|
|
|
+ Result := Point(infoHdr.Width, infoHdr.Height);
|
|
|
|
+ {$ENDIF}
|
|
|
|
+ finally
|
|
|
|
+ Stream.Position := StartPos;
|
|
|
|
+ end;
|
|
|
|
+end;
|
|
|
|
+
|
|
initialization
|
|
initialization
|
|
ImageHandlers.RegisterImageReader ('BMP Format', 'bmp', TFPReaderBMP);
|
|
ImageHandlers.RegisterImageReader ('BMP Format', 'bmp', TFPReaderBMP);
|
|
end.
|
|
end.
|