【问题标题】:Load picturebox image in C# from file in relative path从相对路径中的文件加载 C# 中的图片框图像
【发布时间】:2014-09-06 00:16:48
【问题描述】:

我在 Windows 窗体解决方案中有一个图片框图像。用户从数据库中选择一个项目后,我想将图像加载到这个图片框中。图像的文件名将来自数据库,所有图像必须存储在应用程序文件夹 (\Images) 的子文件夹中。 我不想在我的解决方案中包含所有这些(2000-3000 张图像),此外,随着数据库的增长,用户将添加更多图像。 另外,我不想编写绝对路径。所以这不是我想要的:

pictureBox.Image = Image.FromFile(@"C:\Program Files\Application\Images\" + dbase.filename);

我想编写一个图像文件夹的相对路径,因此无论应用程序安装在哪里,都可以从这个特定的子文件夹加载图像。 我已经尝试过这样的事情,使用名为“test.jpg”的临时测试图像:

pictureBox.Image = Image.FromFile(@"Images\test.jpg");
pictureBox.Image = Image.FromFile(@"..\Images\test.jpg");
pictureBox.Image = Image.FromFile(@"|DataDirectory|\Images\test.jpg");

但是这些不起作用。我只能让它使用绝对路径,例如“C:\Images\test.jpg”。我该怎么办?

【问题讨论】:

  • 问题是当前目录不是你所期望的。输入MsgBox(Environment.CurrentDirectory) 看看它到底是什么。
  • 感谢您指出这一点,罗斯。看起来 CurrentDirectory 是 ..\bin\Debug。当我将图像文件夹放入其中并使用pictureBox.Load(“./Images/test.jpg”)运行我的代码时,它就可以工作了。但是,当我发布我的项目并安装它时,无论我将它放在应用程序文件夹中的哪个位置,它都找不到图像文件夹。 CurrentDirectory 然后指向 C:\Users\AppData\Local\Apps\etc 的一些抽象子文件夹。

标签: c# image path picturebox


【解决方案1】:

你试过PictureBox.Load Method吗?

如果url参数表示本地文件,推荐格式为本地文件路径。例如,一个名为 myPicture.jpglocated atc:\ 的图像文件将通过为 url 参数传递 c:\myPicture.jpg 来访问。可以使用完整路径,例如 http://www.contoso.com/path/images/image.jpg 或相对路径,例如 ./images/image.jpg。如果使用相对路径,则将其视为相对于工作目录。调用 Load 方法会将 ImageLocation 属性设置为 url 的值。

【讨论】:

  • 谢谢小牛。 picturebox.load 建议有助于我开始该项目。我可以使用 [pictureBox.Load ("./Images/test.jpg")] 成功检索图像。但是,当我在 C:\Test 之类的文件夹中发布和安装我的应用程序时,它不再找到 Images 文件夹。我已将其复制到 C:\Test\Images 和每个子文件夹,但没有成功。
  • @Ivo77 - 在您的项目中,当您查看图像的属性时,它的构建操作是什么?此外,根据我的回答中引用的加粗部分,它指出相对路径是相对于工作目录的。因此,下一个合乎逻辑的问题是您将工作目录设置为什么?
  • 实际上不在我的项目中。我的最终应用程序将使用 \Images 文件夹中的 2000 到 3000 张图像的集合。当用户将新项目添加到数据库中时,图像的数量将会增加(可以选择图像,该图像将被调整大小并保存到图像文件夹中)。所以,我不能让图像成为项目的一部分,只是为它们保留的子文件夹。
  • @Ivo77 - 你可以。您基本上需要按照@raney 的回答所说的去做,但是您需要将其设置为当前目录,而不是将其分配给变量。所以它会是Environment.CurrentDirectory = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Images");Environment.CurrentDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);,这取决于你想走哪条路。
  • 啊,找到了!好吧,特立独行。再一次,你是男人!
【解决方案2】:

我会使用反射来获取执行目录,比如:

string ImagesDirectory = 
    Path.Combine(
        Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
        "Images"
    );

【讨论】:

  • 谢谢雷尼。当我在我的 VS2012 项目中使用它时,您的建议非常有效。但是正如上面我的 cmets 中提到的,我在发布和安装应用程序时卡住了。它在已安装应用程序的文件夹内的任何位置都找不到 \Images 子文件夹。
【解决方案3】:

将图像加载到 picturbox 的最佳方法是从项目资源文件夹中加载所需的图像。

为此,请执行以下操作:

  1. 将所需图像添加到资源文件夹。
  2. 将图片从资源文件夹加载到图片框。

    Form1.pictureBox1.Image = yourProject.Properties.Resources.YourImage;

注意:图像类型不是必需的 [.bmp, .jpg 等]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 2017-04-20
    • 2018-02-05
    • 2012-01-21
    相关资源
    最近更新 更多