在for循环中加载图像

时间:2013-03-25 12:44:24

标签: c#

for (int s = 1; s <= NumComponents;s++ )
{
   fname = @"C:\Users\Johaira\Documents\Visual Studio 2010\Projects\SpecialProblem1\SpecialProblem1\bin\Debug\" ;
   fname2 = fname + string.Format("{0:00}.png", s);
    Bitmap inputImage = new Bitmap(fname2);

    //do some image processing here...for example thinning
}

我在c#中进行图像处理。我有这个for循环来处理目录中的每个图像..我的图像的文件名是数字..但我无法加载它们..我该怎么做.. 当它不在循环中时它起作用..当我打电话时

Bitmap inputImage = new Bitmap(@"C:\Users\Johaira\Documents\Visual Studio 2010\Projects\SpecialProblem1\SpecialProblem1\bin\Debug\1.png");

工作正常..仅在一张图片中..但我希望它是动态的,所以我该怎么办?请帮助我......谢谢。

2 个答案:

答案 0 :(得分:0)

假设您的文件名例如为1.png2.png等:

for (int s = 1; s <= NumComponents;s++ ) {
    const string fname = @"C:\Users\Johaira\Documents\Visual Studio 2010\Projects\SpecialProblem1\SpecialProblem1\bin\Debug\" ;
    var fname2 = Path.Combine(fname,String.Format("{0}.png",s));

    using (Bitmap inputImage = new Bitmap(fname2)) {
        // Process image
    }
}

您的代码最初无法正常工作的原因是您使用的{0:00}填充了0循环值。

答案 1 :(得分:0)

您的代码使用

string.Format("{0:00}.png", s)

生成文件名。对于输入值1,这会产生字符串"01"。那是因为您的格式字符串明确包含前导零。

所以问题归结为你从整数到字符串的转换。您想要一个没有前导零的转换。例如:

s.ToString()

或者,如果您希望转换数字的便利性,并且一次性添加扩展名,那么

string.Format("{0}.png", s)

格式项具有以下语法:

{ index[,alignment][ :formatString] }

因此,由于{0}仅包含索引,并省略formatString,因此通过调用对象上的ToString()来执行默认格式设置。因此,上面对string.Format()的调用只是一种方便的编写方式:

s.ToString() + '.png'

作为一般建议,我建议您花点时间学习如何充分利用调试器。如果您检查了文件名变量的值,您会立即看到错误的前导零。通过学习如何使用调试器来调查代码问题,您将从中受益匪浅。