代码之家  ›  专栏  ›  技术社区  ›  mj2008

如何创建Delphi TBitmap的独立副本?

  •  3
  • mj2008  · 技术社区  · 14 年前

    Function GetFooterGraphic(Var xBitmap : TBitmap) : boolean;
    begin
      // load cache here
      if assigned(g_xFooterBitmap) then
      begin
        xBitmap.Assign(g_xFooterBitmap);
        result := true;
      end;
    end
    
    // Get bitmap, then:
    xCanvas.StretchDraw(xDrawRect, xBitmap);
    

    问题是位图在一定页数后无法工作。我只能想象这是一个驱动程序的问题,但它发生在大多数打印机在不同的时间。我可以通过每次重新加载位图来修复它,但我宁愿保留缓存。

    查看了VCL之后,xBitmap.Assign实际上只是添加了对存储项的引用。我想做的是拿一份完整的拷贝,最有效的方法。问题是:
    如何使TBitmap内容完全独立于任何其他引用?

    我希望保持缓存的TBitmap内容完全独立,并返回一个完整的(深度)副本,这样打印就不会影响缓存的版本,从而有希望解决这个问题。

    2 回复  |  直到 14 年前
        1
  •  4
  •   Uwe Raabe    14 年前

    我不能在这里测试它,因为我不能重现这个问题,但可能需要调用 FreeImage 就在那之后 Assign 可能会有帮助。

        2
  •  0
  •   Roddy    14 年前

    SaveToStream LoadToStream ,可能是因为 TMemoryStream .