gpt4 book ai didi

image - 为什么代码在调用 TImage.Picture.LoadFromFile 后继续运行?

转载 作者:行者123 更新时间:2023-12-03 15:47:30 34 4
gpt4 key购买 nike

我正在对标准 VCL TImage 控件和各种其他第三方替代方案的性能进行一些比较。我使用 GetTickCount 来测量加载图像所需的时间。实际上,大约需要 4 秒,但是 LoadFromFile() 几乎立即返回,令我惊讶!

procedure TfrmMain.Button1Click(Sender: TObject);
begin
FStart:= GetTickCount;
imgStandard.Picture.LoadFromFile(txtFilename.Text);
FEnd:= GetTickCount; //<-- Put a breakpoint here to observe immediate return in debug
lblStandard.Caption:= IntToStr(FEnd-FStart)+' Msec';
end;

在两个图像控件中加载相同的 JPEG 文件在视觉上只需与 Graphics32 中的 TImage32 进行比较一样长。两者均按预期在这段时间内(大约 4 秒)阻塞 UI。例如,GR32 报告 3734 毫秒,而标准报告仅报告 16 毫秒。

为什么会发生这种情况?如何准确测量图像真正加载到 TImage 中所需的时间?

最佳答案

Why does this happen?

两个控件之间的区别在于解压缩的处理方式。

  • 当您以这种方式使用 VCL 图像控件时,将从文件中读取压缩数据,但实际解压缩仅在绘制控件时按需进行。
  • 当您使用graphics32图像控件时,加载文件时会发生解压缩。

您的图像所花费的几乎所有时间都用于解压缩步骤,这解释了您的时间差异。

How can I accurately measure the time it takes for the image to really load into a TImage?

您可以在调用 LoadFromFile 之后立即插入对 imgStandard.Update 的调用,这将强制执行绘制周期,从而强制执行解压缩步骤。

关于image - 为什么代码在调用 TImage.Picture.LoadFromFile 后继续运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59253927/

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