delphi - "JPEG Error #42"无法通过 try catch ...除非加载损坏的图像

标签 delphi delphi-7

我正在尝试使用 TImage.Picture.LoadFromFile() 加载损坏的图像(图像文件大小为 0kb),但 try.. except 未捕获JPEG 错误#42:

try  
  Image1.Picture.LoadFromFile('myfile.jpg'); // myfile.jpg is broken image
except
  on e: exception do
    ShowMessage('Fail to load');
end;

消息显示“JPEG 错误 #42”,而不是“加载失败”。

broken image sample

最佳答案

发生的情况是,当图像控件绘制自身时,错误被异步触发。直到那时才处理实际的图像数据,并且图像直到下一个绘制周期才绘制自身。这会在事件处理程序返回后发生。

如果您希望能够同步处理错误,那么您需要强制立即处理无效的图像数据。这是实现这一目标的一种相当丑陋的方法:

try  
  Image1.Picture.LoadFromFile('myfile.jpg'); // myfile.jpg is broken image
  (Image1.Picture.Graphic as TJPEGImage).DIBNeeded;
except
  on e:exception do
    ShowMessage('Fail to load');
end;

请注意,现代版本的 Delphi 已经解决了这个问题,您问题中的代码将按照您的希望和期望运行。

关于delphi - "JPEG Error #42"无法通过 try catch ...除非加载损坏的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34784602/

相关文章:

delphi - Web 浏览器和 OLECMDID_SELECTALL

delphi - 连接时无法创建等待对话框

delphi - 防止 Delphi 10.2 自动向 TForm 添加属性

delphi - 如何在本地计算机上嗅探/监听 HTTP?

delphi - 手动滚动 TComboBox

delphi - 修复了与滚动条结合的 BorderWidth > 0 的错误?

java - 如何通过 JDBC 访问 Windows 版 Blackfish?

sql - 如何合并不同数据库的数据?

regex - 组件 Tperlregex fatal error L3169?

Delphi - 如何检查方法变量?