gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:53:29 25 4
gpt4 key购买 nike

我有一个应用程序,可以在打印机上将文本和图像打印到页面上。在页脚处,我们输出一个图像,该图像通过加载一次进行缓存,并存储在 TBitmap 中。在打印例程中,它创建一个新的 TBitmap,然后调用一个分配缓存位图的函数。然后它最终在该位图上调用 Canvas.StretchDraw。

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 内容完全独立,并返回完整的(深层)副本,以便打印不会影响缓存的版本,从而希望解决此问题。

Delphi 2007(如果相关)。

最佳答案

我无法在这里测试它,因为我无法重现该问题,但也许在 Assign 之后调用 FreeImage 可能会有所帮助。

关于delphi - 如何创建 Delphi TBitmap 的独立副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3281469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com