Declaration
function SaveToStream(Stream: TStream; ImageFormat: TIOFileType): boolean;
Description
Saves the image to a stream (in any format supported by the 
TImageEnIO class).
You must specify the 
ImageFormat.
Returns true on success.
Note:
◼TIEBitmap only supports saving of a single frame image. To load and save images containing multiple frames, use 
TIEMultiBitmap
◼Alternatively, you can use the saving methods of 
IO
◼For legacy reasons, SaveToStream() is an alias of Write()
// Output current image to a TImage
bmp := TIEBitmap.Create();
Stream := TMemoryStream.Create();
bmp.LoadFromFile( 'D:\image.webp' );
bmp.SaveToStream( Stream, ioBMP );
Stream.Position := 0;
Image1.Picture.LoadFromStream( Stream );
Stream.Free();
bmp.Free();
// Example of resizing an image so it does not exceed a maximum size (e.g. for a database blob)
procedure SaveToStreamAtMaxSize(Bitmap: TIEBitmap; Dest: TStream; MaxSizeBytes: Int64; Format: TIOFileType; JPEGQuality: Integer = 75; ResampleFilter: TResampleFilter = rfFastLinear);
const
  Scale_Reduction_Per_Pass = 0.25; // Reduce size of image by 25% each pass
var
  currScale: Double;
  tempBmp: TIEBitmap;
begin
  currScale := 1.0;
  tempBmp := TIEBitmap.Create();
  try
    While True do
    begin
      Dest.Size := 0;
      tempBmp.Assign( Bitmap );
      if ( tempBmp.Width < 50 ) or ( tempBmp.Height < 50 ) then
        raise Exception.create( 'Cannot resample further' );
      tempBmp.Resample( currScale, ResampleFilter );
      tempBmp.Params.JPEG_Quality := JPEGQuality;
      tempBmp.SaveToStream( Dest, Format );
      if Dest.Size <= MaxSizeBytes then
        EXIT; // SUCCESS
      if Dest.Size > MaxSizeBytes * 4 then
        currScale := currScale * ( 1.0 / Sqrt(Dest.Size / MaxSizeBytes ))   // Image is huge? Reduce more quickly
      else
        currScale := currScale * ( 1.0 - Scale_Reduction_Per_Pass );          // Image is close to size? Fine tuning...
    end;
  finally
    tempBmp.Free();
  end;
end;
procedure TForm1.Button1Click(Sender: TObject);
const
  MAX_SIZE_BYTES = 150 * 1024;
var
  bmp: TIEBitmap;
  ms: TMemoryStream;
begin
  bmp := TIEBitmap.Create();
  ms  := TMemoryStream.Create();
  try
    bmp.LoadFromFile( 'D:\Testing_Multimedia\Big_Big_Pix\570130.jpg' );
    SaveToStreamAtMaxSize( bmp, ms, MAX_SIZE_BYTES, ioJPEG, 80 );
    // Do something with ms, e.g. output to database blob field
    // Test output
    // ms.Position := 0;
    // ImageEnView1.IO.LoadFromStream( ms );
  finally
    ms.Free();
    bmp.Free();
  end;
end;
See Also
◼SaveToFile
◼LoadFromFile
◼Filename
◼IO