diff --git a/Olf.VCL.Streams.pas b/Olf.VCL.Streams.pas index 5598ace..7897aa3 100644 --- a/Olf.VCL.Streams.pas +++ b/Olf.VCL.Streams.pas @@ -20,18 +20,26 @@ procedure SaveBitmapToStream(ABitmap: TBitmap; AToStream: TStream); if not assigned(AToStream) then raise exception.create('Need an existing stream to save the bitmap !'); - ms := TMemoryStream.create; - try - ABitmap.SaveToStream(ms); - size := ms.size; + if not assigned(ABitmap) then + begin + size := 0; AToStream.WriteData(size); - if (size > 0) then - begin - ms.Position := 0; - AToStream.CopyFrom(ms, size); + end + else + begin + ms := TMemoryStream.create; + try + ABitmap.SaveToStream(ms); + size := ms.size; + AToStream.WriteData(size); + if (size > 0) then + begin + ms.Position := 0; + AToStream.CopyFrom(ms, size); + end; + finally + ms.free; end; - finally - ms.free; end; end; @@ -43,20 +51,22 @@ function LoadBitmapFromStream(AFromStream: TStream): TBitmap; if not assigned(AFromStream) then raise exception.create('Need an existing stream to load the bitmap !'); - ms := TMemoryStream.create; - try - if (AFromStream.ReadData(size) <> sizeof(size)) then - result := nil - else - begin + if (AFromStream.ReadData(size) <> sizeof(size)) then + result := nil + else if (size < 1) then + result := nil + else + begin + ms := TMemoryStream.create; + try ms.CopyFrom(AFromStream, size); ms.Position := 0; result := TBitmap.create; result.LoadFromStream(ms); + finally + ms.free; end; - finally - ms.free; end; end; -end. +end. \ No newline at end of file