c#位图只在指定静态文件地址时加载

本文关键字:静态 文件地址 加载 位图 | 更新日期: 2023-09-27 17:51:14

我试图创建一个方法,加载图像(png)并将其存储在位图变量中以供以后使用。代码如下:

 private static Bitmap LoadImage(string subfolderName, string imageName) {
            string fileSpec = string.Format(@".'Images'{0}'{1}.png", subfolderName, imageName);
            Bitmap bitmap = new Bitmap(fileSpec);    

            return bitmap;
        }

您可以看到它相当简单,我将文件路径存储在fileSpec中,然后将其用作创建新位图的参数。问题是,当我使用这是,我得到以下错误:

"Parameter is not Valid"

错误指向这一行:

Bitmap bitmap = new Bitmap(fileSpec);  

我发现这个错误意味着当文件不存在时发生,但文件在那里,当我使用静态文件地址时,如:

private static Bitmap LoadImage(string subfolderName, string imageName) {
            string st = @".'Images'Cards'CardBackRed.png"; //did this to test if it was working in any capacity at all
            Bitmap bitmap = new Bitmap(st);
            return bitmap;
        }

我没有得到错误和图像加载良好。我错过了什么很明显的东西吗?如果你能帮忙,我将不胜感激。

谢谢!

c#位图只在指定静态文件地址时加载

如您所示,当硬编码文件夹和文件名时,错误就会消失。因此,传递给LoadImage方法的subfolderNameimageName变量不包含您期望的值。

您可以通过在LoadImage方法的开头设置一个断点来演示这一点,并在该点检查subfolderNameimageName变量的值。

当组合路径的多个部分时,使用. net提供的Path.Combine()方法。可能 subfolderName中已经有一个反斜杠,并且您正在加倍它们。Path.Combine()为您检查,所以它是安全的使用。我怀疑这就是这里正在发生的事情。

string.Format(@".'Images'{0}'{1}.png", subfolderName, imageName);

由于您使用的是相对路径,因此我不确定您必须提供什么才能使此工作。试试我下面做的…它应该从当前执行程序集的路径开始,其中应该等同于.

string fileSpec = 
    Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)),
                 "Images",
                 subfolderName,
                 imageName + ".png");

@Tetsuo_and_Youth,您设置错误的文件路径你说"调试器显示filespec的值为:filespec"F:'Users'MYUSERNAME'Documents'Gui Games with shared game class'Gui Games'bin'Debug'Cards'CardBackRed.png"string",这是正确的路径。

意味着相对路径应该是

string fileSpec = string.Format(@".'{0}'{1}.png", subfolderName, imageName);

下没有"Images"文件夹。/bin/debug/"文件夹

并且还暗示在您的帖子中,第二个fileSpec没有设置为您所说的正确路径。