“JPEG错误#42”无法通过尝试捕获...除非加载损坏的图像

时间:2016-01-14 08:17:26

标签: 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

1 个答案:

答案 0 :(得分:3)

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

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

prop1.Invoke(model)

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