在for循环中加载图像

本文关键字:加载 图像 循环 for | 更新日期: 2023-09-27 18:05:58

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");

它在一个图像中工作得很好,但我想让它是动态的,所以我该怎么做?

在for循环中加载图像

你的代码使用

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'

作为一般建议,我建议您花一些时间学习如何最大限度地利用调试器。如果检查文件名变量的值,就会立即看到错误的前导零。学习如何使用调试器来调查代码中的问题将使您受益匪浅。

假设您的文件名为1.png, 2.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你的循环值