从带有路径的资源文件加载PictureBox图像(第3部分)

我知道之前已经问过(并回答过)这个问题。 但是,没有一个解决方案适合我。 这可能是由于我的无能,伏都教诅咒或者我想念的简单而明显的事情。

下面是拼图的所有相关部分的屏幕截图:

截屏http://dinosaur-island.com/PlantPictureBoxScreenCap.jpg

正如您所看到的,有很多植物作为资源加载到Images文件夹中。 有一个带有名为“PlantPicture”的图片框的表单。 有字符串,我知道它有一个很好的路径(因为我在调试器中检查过它):

PicPath = PicPath+".bmp"; 

截屏http://dinosaur-island.com/PlantDebugger.jpg

我尝试了很多种装载,铸造等方法等。

如果你会怜悯并再给它一次,我会很感激任何建议。 谢谢!

路径应该是这样的: "Images\a.bmp" 。 (注意缺少一个前导斜杠,而斜杠是反斜杠。)

然后:

 pictureBox1.Image = Image.FromFile(@"Images\a.bmp"); 

我只是试图确保它,它的工作原理。 这是你得到的另一个答案 – “永远复制”。

好的……所以首先你需要在你的项目中导入图像

1)在“表单设计”中选择图片框

2)打开PictureBox任务(它是在图片框边缘右侧固定的小箭头)

3)点击“选择图片…”

4)选择第二个选项“Project resource file:”(此选项将创建一个名为“Resources”的文件夹,您可以使用Properties.Resources访问该文件夹)

5)单击导入并从计算机中选择图像(现在,将在步骤4中创建的Resources文件夹中发送与图像同名的图像副本)

6)点击确定

现在图像在您的项目中,您可以将它与属性命令一起使用。当您想要从picturebox更改图片时,只需输入以下代码:

 pictureBox1.Image = Properties.Resources.myimage; 

注意:myimage代表图像的名称…在资源之后键入点后,在您的选项中它将是您导入的图像文件

这取决于您的文件路径。 对我来说,当前目录是[project]\bin\Debug ,所以我不得不两次移动到父文件夹。

 Image image = Image.FromFile(@"..\..\Pictures\"+text+".png"); this.pictureBox1.Image = image; 

要查找当前目录,可以创建名为label2的虚拟标签并写入:

 this.label2.Text = System.IO.Directory.GetCurrentDirectory(); 

将“复制到输出目录”设置为“始终复制”或“如果更新则复制”可能对您有所帮助。

PicPath是一个相对路径,在加载图像时会在某个时间转换为绝对路径。 如果在Debug中使用Path.GetFullPath(PicPath) ,很可能会看到指定位置上没有图像。

接受的答案有一个主要缺点!
如果以这种方式加载图像,PictureBox将锁定图像,因此如果您尝试对该图像执行任何将来的操作,您将获得在另一个应用程序中使用的错误消息图像!
本文在VB中展示了解决方案

这是C#实现

  FileStream fs = new System.IO.FileStream(@"Images\a.bmp", FileMode.Open, FileAccess.Read); pictureBox1.Image = Image.FromStream(fs); fs.Close();