TBitmap now uses fpImage for writing bitmaps

git-svn-id: trunk@4582 -
This commit is contained in:
mattias 2003-09-08 13:07:17 +00:00
parent bf6c4c8362
commit bc88b6e8ef
3 changed files with 24 additions and 50 deletions

View File

@ -33,10 +33,11 @@ interface
uses uses
SysUtils, Classes, SysUtils, Classes,
{$IFDEF UseFPImage}
FPImage, FPReadPNG, FPWritePNG, FPWriteBMP, IntfGraphics,
{$ENDIF}
LCLStrConsts, vclGlobals, LMessages, LCLType, LCLProc, LCLLinux, LResources, LCLStrConsts, vclGlobals, LMessages, LCLType, LCLProc, LCLLinux, LResources,
GraphType, GraphMath GraphType, GraphMath;
{$IFDEF UseFPImage}, FPImage, FPReadPNG, FPWritePNG, IntfGraphics{$ENDIF}
;
type type
PColor = ^TColor; PColor = ^TColor;
@ -1198,6 +1199,9 @@ end.
{ ============================================================================= { =============================================================================
$Log$ $Log$
Revision 1.89 2003/09/08 13:07:17 mattias
TBitmap now uses fpImage for writing bitmaps
Revision 1.88 2003/09/08 12:21:48 mattias Revision 1.88 2003/09/08 12:21:48 mattias
added fpImage reader/writer hooks to TBitmap added fpImage reader/writer hooks to TBitmap

View File

@ -496,6 +496,13 @@ begin
end; end;
procedure TBitmap.WriteStream(Stream: TStream; WriteSize: Boolean); procedure TBitmap.WriteStream(Stream: TStream; WriteSize: Boolean);
{$IFDEF UseFPImage}
begin
WriteStreamWithFPImage(Stream,WriteSize,TFPWriterBMP);
if (FImage.SaveStream<>nil) and (FImage.SaveStreamType=bnNone) then
FImage.SaveStreamType:=bnWinBitmap;
end;
{$ELSE}
Type Type
TBITMAPHEADER = packed record TBITMAPHEADER = packed record
FileHeader : tagBitmapFileHeader; FileHeader : tagBitmapFileHeader;
@ -641,6 +648,7 @@ begin
MemStream.Free; MemStream.Free;
end; end;
end; end;
{$ENDIF}
procedure TBitmap.StoreOriginalStream(Stream: TStream); procedure TBitmap.StoreOriginalStream(Stream: TStream);
var var
@ -735,6 +743,7 @@ begin
MemStream.Position:=0; MemStream.Position:=0;
FreeAndNil(FImage.FSaveStream); FreeAndNil(FImage.FSaveStream);
FImage.SaveStream:=MemStream; FImage.SaveStream:=MemStream;
FImage.SaveStreamType:=bnNone;
MemStream:=nil; MemStream:=nil;
// copy savestream to destination stream // copy savestream to destination stream
Stream.CopyFrom(FImage.SaveStream,FImage.SaveStream.Size); Stream.CopyFrom(FImage.SaveStream,FImage.SaveStream.Size);
@ -879,6 +888,9 @@ end;
{ ============================================================================= { =============================================================================
$Log$ $Log$
Revision 1.45 2003/09/08 13:07:17 mattias
TBitmap now uses fpImage for writing bitmaps
Revision 1.44 2003/09/08 12:21:48 mattias Revision 1.44 2003/09/08 12:21:48 mattias
added fpImage reader/writer hooks to TBitmap added fpImage reader/writer hooks to TBitmap

View File

@ -270,55 +270,10 @@ end;
procedure TPixmap.WriteStream(Stream: TStream; WriteSize: Boolean); procedure TPixmap.WriteStream(Stream: TStream; WriteSize: Boolean);
{$IFDEF UseFPImage} {$IFDEF UseFPImage}
Procedure DoWriteStreamSize(DestStream: TStream; Size: longint);
begin begin
if WriteSize then WriteStreamWithFPImage(Stream,WriteSize,TFPWriterBMP);
DestStream.WriteBuffer(Size, SizeOf(Size)); if (FImage.SaveStream<>nil) and (FImage.SaveStreamType=bnNone) then
end;
procedure DoWriteOriginal;
begin
DoWriteStreamSize(Stream,FImage.SaveStream.Size);
FImage.SaveStream.Position:=0;
Stream.CopyFrom(FImage.SaveStream,FImage.SaveStream.Size);
end;
var
MemStream: TMemoryStream;
IntfImg: TLazIntfImage;
XPMWriter: TLazWriterXPM;
begin
if (FImage.SaveStream<>nil) and (FImage.SaveStream.Size>0)
and (FImage.SaveStreamType=bnXPixmap) then begin
DoWriteOriginal;
exit;
end;
// write image in XPM format to temporary stream
MemStream:=TMemoryStream.Create;
IntfImg:=nil;
XPMWriter:=nil;
try
IntfImg:=TLazIntfImage.Create(0,0);
IntfImg.LoadFromBitmap(Handle,0);
XPMWriter:=TLazWriterXPM.Create;
IntfImg.SaveToStream(MemStream,XPMWriter);
FreeAndNil(XPMWriter);
FreeAndNil(IntfImg);
// save stream, so that further saves will be fast
MemStream.Position:=0;
FreeAndNil(FImage.FSaveStream);
FImage.SaveStream:=MemStream;
MemStream:=nil;
FImage.SaveStreamType:=bnXPixmap; FImage.SaveStreamType:=bnXPixmap;
// copy savestream to destination stream
Stream.CopyFrom(FImage.SaveStream,FImage.SaveStream.Size);
finally
MemStream.Free;
IntfImg.Free;
XPMWriter.Free;
end;
end; end;
{$ELSE} {$ELSE}
begin begin
@ -331,6 +286,9 @@ end;
{ ============================================================================= { =============================================================================
$Log$ $Log$
Revision 1.22 2003/09/08 13:07:17 mattias
TBitmap now uses fpImage for writing bitmaps
Revision 1.21 2003/09/02 21:32:56 mattias Revision 1.21 2003/09/02 21:32:56 mattias
implemented TOpenPictureDialog implemented TOpenPictureDialog