Delphi:无法打开 .bmp 文件

Posted

技术标签:

【中文标题】Delphi:无法打开 .bmp 文件【英文标题】:Delphi: Unable to open .bmp file 【发布时间】: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 文件夹/ 您确定目标操作系统将/ 作为路径分隔符而不是\(反斜杠)处理吗? 【参考方案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;

注意一些其他的事情:

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

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

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

【讨论】:

以上是关于Delphi:无法打开 .bmp 文件的主要内容,如果未能解决你的问题,请参考以下文章

电脑中BMP格式图片无法打开

高分求解,为何BMP图片无法打开?

HEIC文件怎么打开,一键批量将HEIC图片转换JPG/PNG/BMP

HEIC文件怎么打开,一键批量将HEIC图片转换JPG/PNG/BMP

打不开BMP格式

delphi打开unicode文件的问题