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)
我也修复了第56行的一个类型:“PictureForm.PuzzleForm。”到“PicturePuzzle”,但仍然没有运气。
您未指定从中加载文件的路径。它们将从程序集的运行位置加载。
请注意,Image.FromFile不会加载嵌入式资源,而是加载磁盘中的.png。我认为这是你的意图。
检查Visual Studio中图像的属性,并确保复制到输出目录是复制如果是较新或始终复制。这里有一个截图(在我的情况下,它是一个游标资源,但对图像的想法相同)。
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。
忽略我之前的评论 - 我可以从你对OP的评论中看到,你正在解释他的帖子,以表明他*希望*文件在本地。道歉。 –
@BrianWarshaw:我更新了我的答案,以说明两种可能性。 –
谢谢,我试过这样做,但我得到最后一行的错误。错误是:“...不包含'picturebox1'的定义,并且'picturebox1'没有接受第一个参数类型的MyProject.MyClass'的扩展方法' –
代码中没有什么可以说明文件位于何处,因此它缺省的文件不在其中。如果这些文件与您的exe文件位于相同的位置,那么尝试一下像 imgNmae =“./image0”+ i +“.png”;
调整相对路径以考虑文件实际位置。
为什么downvote?它回答了提出的问题...... –
如果他的文件与他的.exe文件位于同一位置,那么不需要添加路径的“./”部分。它已经在那里看。 –
什么是您的“资源文件”,它存储在哪里以及您的代码与该资源文件相关的执行位置? –
嵌入式资源文件内置到输出组件中。在这段代码中,你认为你是在告诉计算机在程序集中寻找文件?您似乎试图从文件系统加载它们。 – adv12
@ adv12:它看起来并不像他试图加载嵌入式资源,而是从磁盘加载.png文件。 –