zoukankan      html  css  js  c++  java
  • TWICImage.SaveToStream内存泄漏的解决办法

    这个BUG从2010到XE5一直没改.....只能自己写个函数来搞了

    uses
        ActiveX;
    
    procedure WICImageSaveToStream(AWICImage: TWICImage; AStream: TStream);
    var
      nEncoder: IWICBitmapEncoder;
      nFrame: IWICBitmapFrameEncode;
      nProps: IPropertyBag2;
      nLStreamAdapter: TStreamAdapter;
      nPixelFormat: TGUID;
      nLStream: IWICStream;
      nPalette: IWICPalette;
      nData: TMemoryStream;
    begin
      nData:=TMemoryStream.Create;
      nLStreamAdapter := TStreamAdapter.Create(nData);
      IUnknown(nLStreamAdapter)._AddRef;
      try
        nData.Clear;
        AWICImage.ImagingFactory.CreateStream(nLStream);
        nLStream.InitializeFromIStream(nLStreamAdapter);
        AWICImage.ImagingFactory.CreateEncoder(AWICImage.EncoderContainerFormat, guid_null, nEncoder);
        nEncoder.Initialize(nLStream, WICBitmapEncoderNoCache);
        nEncoder.CreateNewFrame(nFrame, nProps);
        nFrame.Initialize(nProps);
        AWICImage.Handle.GetPixelFormat(nPixelFormat);
        nFrame.SetPixelFormat(nPixelFormat);
        nFrame.SetSize(AWICImage.Width, AWICImage.Height);
        AWICImage.ImagingFactory.CreatePalette(nPalette);
        AWICImage.Handle.CopyPalette(nPalette);
        nFrame.SetPalette(nPalette);
        nFrame.WriteSource(AWICImage.Handle, nil);
        nFrame.Commit;
        nEncoder.Commit;
        nData.Position := 0;
        AStream.CopyFrom(nData, nData.Size);
      finally
        IUnknown(nLStreamAdapter)._Release; {相对于VCL代码 , 这里要释放}
        nData.Free;
      end;
    end;
  • 相关阅读:
    第五周学习总结
    第四周学习总结
    实验三报告
    第2,3周学习总结
    第二次实验报告
    实验一报告
    MyFirstStruts2
    java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils
    Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4,and Java EE 5 Web modules
    The JRE could not be found.Edit the server and change the JRE location.
  • 原文地址:https://www.cnblogs.com/lzl_17948876/p/3327878.html
Copyright © 2011-2022 走看看