【问题标题】:Delphi: Unable to open .bmp fileDelphi:无法打开 .bmp 文件
【发布时间】:2020-06-15 19:36:25
【问题描述】:

我正在尝试将图像加载到 stringgrid 单元格中

if CheckBox5.Checked = True then
 begin
    Ver :=  Ver + 1;
    Bitmap := TBitmap.Create;
    Bitmap.LoadFromFile('media/belgie_vlag.bmp');
    Form3.StringGrid1.Canvas.StretchDraw
    (Form3.StringGrid1.CellRect(Hor,Ver),Bitmap);
    Bitmap.Free;
 end;

当我运行应用程序时,会显示一条错误消息,提示无法打开 .bmp 文件。有什么帮助吗?

【问题讨论】:

  • 为什么您认为操作系统知道在哪里查找 .bmp 文件?您的系统上可能有一百万个media 文件夹/
  • 您确定目标操作系统将/ 作为路径分隔符而不是\(反斜杠)处理吗?

标签: image delphi bmp


【解决方案1】:

最可能的问题是找不到文件,因为您没有指定绝对路径。您应该始终使用绝对路径(例如,C:\Users\Andreas Rejbrand\Desktop\image.png,而不是 image.png)。

例如,如果media 文件夹是可执行文件的同级文件夹,则绝对路径为ExtractFilePath(Application.ExeName) + 'media\belgie_vlag.bmp'

下面的代码应该可以工作:

if CheckBox5.Checked then
begin
  Ver := Ver + 1;
  Bitmap := TBitmap.Create;
  try
    Bitmap.LoadFromFile(ExtractFilePath(Application.ExeName) + 'media\belgie_vlag.bmp');
    Form3.StringGrid1.Canvas.StretchDraw
      (Form3.StringGrid1.CellRect(Hor,Ver),Bitmap);
  finally
    Bitmap.Free;
  end;
end;

注意一些其他的事情:

  1. 您必须始终使用try..finally 块保护资源,如上所述。否则,在这种情况下,如果在加载或绘制图像时引发异常,则会泄漏图像对象,使您的应用程序占用内存并获得有限的生命周期。

  2. 不用写if mybool = True thenif mybool then 就够了。

  3. 您应该只在适当的事件处理程序中绘制字符串网格。我不知道你的代码放在哪里,所以我不知道你的做法是否正确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    相关资源
    最近更新 更多