C#:FileNotFoundException当从资源加载图像

问题描述:

我想从我的资源文件中加载一堆图像,但出于某种原因我得到FileNotFoundException。图像名称是这样的: “image01.png”,“image02.png”,...,“image10.png”,image11.png“C#:FileNotFoundException当从资源加载图像

最后,我希望能够显示所有在屏幕上的图像

以下是我有:

String imgName; 
     int row = 0, col = 0; 

     for (int i = 1; i <= 15; i++) 
     { 
      //get the name of the current image 
      if (i < 10) 
       imgName = "image0" + i + ".png"; 
      else 
       imgName = "image" + i + ".png"; 

      Image img = null; 
      try { 
       img = Image.FromFile(imgName);//read the image from the resource file 
      } 
       catch (Exception e) { Console.WriteLine("ERROR!!!" + e); } 
} 

下面是一个简单的错误输出,我越来越:

ERROR!!!System.IO.FileNotFoundException: tile01.png 
    at System.Drawing.Image.FromFile(String filename, Boolean useEmbeddedColorManagement) 
    at System.Drawing.Image.FromFile(String filename) 

截图: updated code

我也修复了第56行的一个类型:“PictureForm.PuzzleForm。”到“PicturePuzzle”,但仍然没有运气。

+0

什么是您的“资源文件”,它存储在哪里以及您的代码与该资源文件相关的执行位置? –

+2

嵌入式资源文件内置到输出组件中。在这段代码中,你认为你是在告诉计算机在程序集中寻找文件?您似乎试图从文件系统加载它们。 – adv12

+0

@ adv12:它看起来并不像他试图加载嵌入式资源,而是从磁盘加载.png文件。 –

您未指定从中加载文件的路径。它们将从程序集的运行位置加载。

请注意,Image.FromFile不会加载嵌入式资源,而是加载磁盘中的.png。我认为这是你的意图。

检查Visual Studio中图像的属性,并确保复制到输出目录是复制如果是较新或始终复制。这里有一个截图(在我的情况下,它是一个游标资源,但对图像的想法相同)。

enter image description here

UPDATE

如果你已经在你的EXE或其他文件嵌入您的图片,你可以使用类似的代码

System.Reflection.Assembly thisExe; 
thisExe = System.Reflection.Assembly.GetExecutingAssembly(); 
System.IO.Stream file = 
    thisExe.GetManifestResourceStream("AssemblyName.ImageFile.jpg"); 
this.pictureBox1.Image = Image.FromStream(file); 

Source

您可以通过将属性Build Action设置为Embedded Resource将您的图像嵌入到二进制文件(通常是.exe)中,或者通过将Build Action设置为Content将其保留为单独文件。如果您作为内容离开,请将复制到输出目录设置为True。

+0

忽略我之前的评论 - 我可以从你对OP的评论中看到,你正在解释他的帖子,以表明他*希望*文件在本地。道歉。 –

+0

@BrianWarshaw:我更新了我的答案,以说明两种可能性。 –

+0

谢谢,我试过这样做,但我得到最后一行的错误。错误是:“...不包含'picturebox1'的定义,并且'picturebox1'没有接受第一个参数类型的MyProject.MyClass'的扩展方法' –

代码中没有什么可以说明文件位于何处,因此它缺省的文件不在其中。如果这些文件与您的exe文件位于相同的位置,那么尝试一下像 imgNmae =“./image0”+ i +“.png”;

调整相对路径以考虑文件实际位置。

+0

为什么downvote?它回答了提出的问题...... –

+0

如果他的文件与他的.exe文件位于同一位置,那么不需要添加路径的“./”部分。它已经在那里看。 –