【问题标题】:how to set image in Visual Studio C# Windows Forms with Image.FromFile如何使用 Image.FromFile 在 Visual Studio C# Windows 窗体中设置图像
【发布时间】:2021-06-27 04:56:04
【问题描述】:

所以我正在尝试为我制作的表单应用程序设置自定义图像。我尝试定位的图像位于与我的解决方案文件相同级别的名为“图像”的文件夹中。解决方案文件是一个 C# windows forms (net core framework) 解决方案。这是一个基本的表单应用程序,我想根据用户选择显示图像,但是现在我每次尝试使用此代码设置图像时都会遇到未处理的异常:

picFood.Image = Image.FromFile("../../Images/burger.jpg");

确切的错误是“System.IO.FileNotFoundException: ../../Images/burger.jpg”

在另一个完全不相关的解决方案中,这是可行的。文件夹结构相同。一个名为 Images 的文件夹与 .sln 文件位于同一目录级别,其中保存着图像。它们在我的解决方案资源管理器和所有内容中。我用一个“../”试过这个,没有一个“../”,所以我不知道从这里做什么。

【问题讨论】:

  • 错误很明显,在给定的路径中找不到文件。您是否将路径粘贴到 Windows 资源管理器中以查看该路径是否确实包含指定的文件?
  • 我想我的问题在于,有没有办法将文件存储在子目录中并在不使用它所在位置的整个路径的情况下调用它?
  • 如果您将图像文件的属性设置为Copy Always,那么您将在与您的EXE 相同的文件夹中找到一个images 文件夹。然后你可以通过.\images\whatever.jpg 来引用它,并且在构建部署包时,一切都在一个地方

标签: c# image visual-studio


【解决方案1】:

具有相对路径的文件相对于应用程序的工作目录打开。

在这种情况下,当从 Visual Studio 中启动时,默认是 bin 文件夹,其中默认放置已编译的应用程序。

因此,如果您的二进制文件位于 <project dir>/bin/Debug/App.exe 中,则此路径将解析为 <project dir>/Image/burger.jpg
如果您在构建配置中更改了某些内容,或者您​​的应用程序在运行时切换了目录(例如通过Directory.SetCurrentDirectory),则此路径可能与您预期的不同。

要了解您的问题,我建议您开始查看您的工作目录是什么。您可以通过Directory.GetCurrentDirectory()在您的代码中获取它。
您还可以使用 Path.GetFullPath 解析您的相对路径。
打印这两个值以查看您的程序尝试从何处加载文件。

请记住,如果您想使用它们,您放在解决方案/项目文件夹中的任何图像文件都需要与您的二进制文件一起复制。
要使用没有.. 的相对路径,您可以在编译期间将它们与二进制文件一起复制,请参阅: VS2010 How to include files in project, to copy them to build output directory automatically during build or publishCopying Visual Studio project file(s) to output directory during build 了解如何做到这一点。

【讨论】:

  • 是的,我得到的相对路径不正确。我还将它们作为资源添加到资源文件夹中。我以前将它们放在图像文件夹中,与现在的资源文件夹在同一个位置,但相同的位置调用(“../../Images/file.jpg”)不起作用,现在它们在资源文件夹中它确实有效。显然将它指向资源文件夹而不是图像文件夹,但现在很好,所以我很高兴。
猜你喜欢
  • 2012-10-31
  • 2011-08-07
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 2016-10-30
  • 2017-09-24
  • 2018-05-15
  • 1970-01-01
相关资源
最近更新 更多