procedure TWICImage.LoadFromStream(Stream: TStream);
var
  LStream: TStreamAdapter;
  BitmapDecoder: IWICBitmapDecoder;
  LBitmapFrame: IWICBitmapFrameDecode;
  LGUID: TGUID;  procedure WicCheck(Result: HRESULT);
  begin
    if Failed(Result) then
      raise EInvalidGraphic.Create(SInvalidImage);
  end;
begin
  FreeAndNil(FBitmap);  FData.Clear;
  FData.CopyFrom(Stream, Stream.Size - Stream.Position);
  FData.Position := 0;
  LStream := TStreamAdapter.Create(FData); // 要把这个函数的变量释放掉,它导致内存泄露,烦死了  WicCheck(FImagingFactory.CreateDecoderFromStream(LStream, guid_null, WICDecodeMetadataCacheOnDemand, BitmapDecoder));
  WicCheck(BitmapDecoder.GetContainerFormat(LGUID));
  EncoderContainerFormat := LGUID;
  WicCheck(BitmapDecoder.GetFrame(0, LBitmapFrame));
  WicCheck(FImagingFactory.CreateBitmapFromSource(LBitmapFrame, WICBitmapCacheOnLoad, FWicBitmap));
  WicCheck(FWicBitmap.GetSize(FWidth, FHeight));  FFormatChanged := False;
end;