我正在尝试从我的资源文件加载一堆图像,但由于某种原因我得到了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)
我还在第56行修改了一个类型:“PictureForm.PuzzleForm”。到“PicturePuzzle”。但仍然没有运气。
答案 0 :(得分:3)
您没有指定加载文件的路径。它们将从程序集运行的地方加载。
请注意,Image.FromFile不会加载嵌入式资源,而是加载来自磁盘的.png。我认为这是你想要的。
检查Visual Studio中图像的属性,并确保“复制到输出目录”为“如果较新则复制”或“始终复制”。这是一个截图(在我的例子中,它是一个光标资源,但对于图像来说是一样的想法)。
<强>更新强>
如果您已将图像嵌入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 ;;
调整文件实际所在位置的相对路径。