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 then
; if mybool then
就够了。
您应该只在适当的事件处理程序中绘制字符串网格。我不知道你的代码放在哪里,所以我不知道你的做法是否正确。
【讨论】:
以上是关于Delphi:无法打开 .bmp 文件的主要内容,如果未能解决你的问题,请参考以下文章
HEIC文件怎么打开,一键批量将HEIC图片转换JPG/PNG/BMP