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

时间:2015-12-14 20:22:38

标签: c# image resources filenotfoundexception

我正在尝试从我的资源文件加载一堆图像,但由于某种原因我得到了FileNotFoundException。图像名称是这样的: “image01.png”,“image02.png”,...,“image10.png”,image11.png“

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

这就是我所拥有的:

  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”。但仍然没有运气。

2 个答案:

答案 0 :(得分:3)

您没有指定加载文件的路径。它们将从程序集运行的地方加载。

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

检查Visual Studio中图像的属性,并确保“复制到输出目录”为“如果较新则复制”或“始终复制”。这是一个截图(在我的例子中,它是一个光标资源,但对于图像来说是一样的想法)。

enter image description here

<强>更新

如果您已将图像嵌入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将它们保留为单独的文件。如果保留为内容,请将“复制到输出目录”设置为“真”。

答案 1 :(得分:0)

您的代码中没有任何内容可以说明文件的位置,因此它默认为文件不在某处。如果文件与exe位于同一位置,请尝试类似的方法 imgNmae =&#34; ./ image0&#34; + i +&#34; .png&#34 ;;

调整文件实际所在位置的相对路径。