Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从具有路径的资源文件加载PictureBox图像(第3部分)_C#_Picturebox - Fatal编程技术网

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

C# 从具有路径的资源文件加载PictureBox图像(第3部分),c#,picturebox,C#,Picturebox,据我所知,这个问题以前曾被问过并回答过。然而,没有一个解决方案对我有效 下面是拼图中所有相关部分的屏幕截图: 如您所见,有许多植物位图作为资源加载到Images文件夹中。有一个表单带有名为PlantPicture的picturebox。有一个字符串,我知道它有一个很好的路径,因为我在调试器中检查过它: PicPath = PicPath+".bmp"; 我尝试了许多加载、强制转换等方法。将“复制到输出目录”设置为“始终复制”或“复制(如果更新)”可能会对您有所帮助 Pi

据我所知,这个问题以前曾被问过并回答过。然而,没有一个解决方案对我有效

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

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

            PicPath = PicPath+".bmp";

我尝试了许多加载、强制转换等方法。

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

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

路径应该类似于:images\a.bmp。请注意,缺少前导斜杠,斜杠是后斜杠

然后:

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

我只是试着确认一下,它是有效的。这是你得到的另一个答案——总是复制。

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

1在表单设计视图中选择PictureBox

2打开PictureBox任务 这是印在图片盒边缘右侧的小箭头

3点击选择图像

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

5点击导入。。。并从计算机中选择图像 现在,图像的副本将保存在步骤4创建的资源文件夹中

6点击OK

现在图像已在项目中,您可以将其与“属性”命令一起使用。要在PictureBox中更改图片,只需键入以下代码:

pictureBox1.Image = Properties.Resources.MyImage;
注: MyImage表示图像的名称。。。
键入Properties.Resources.后,将显示所有导入的图像文件…

接受的答案有一个主要缺点! 如果您以这种方式加载图像,PictureBox将锁定图像,因此如果您尝试在该图像上执行任何后续操作,您将在另一个应用程序中收到错误消息image used! 这个

这是C语言的实现

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

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

Image image = Image.FromFile(@"..\..\Pictures\"+text+".png");
this.pictureBox1.Image = image;
要查找当前目录,可以制作一个名为label2的虚拟标签,并编写以下内容:

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

我改为“永远复制”。。。Path.GetFullPathPicPath的输出是C:\\Images\\None.bmp-当然不是我想要的。但是,我真的不想从硬盘加载图片。这些图像不是我们多年前称之为“预编译内联图像”的吗?是的。很抱歉,正如ispiro所说的那样,a已经监督了领先的/经过了很多努力才得到了后面的斜杠。PicPath=@Images\None.bmp这是“None”图像的正确路径。。。引发错误:System.Drawing.dll中发生“System.IO.FileNotFoundException”类型的未处理异常。其他信息@Images\None.bmp。。。仔细检查。None.bmp不存在于“Images”磁盘上的资源和文件夹中@zetar@Images\None.bmp错误@Images\None.bmp是正确的。@只是告诉C不要转义\后面的N,而是将\当作简单的反斜杠。您也可以使用:\\一个双反斜杠。明白了!删除了传入的字符串中的@!