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

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

4

2 回答 2

0

您的代码使用

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

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

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

s.ToString()

或者,如果您想要方便地转换号码并一次性添加分机,那么

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

格式项具有以下语法:

{ index[,alignment][ :formatString] }

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

s.ToString() + '.png'

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

于 2013-03-25T12:53:43.513 回答
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您的循环值。

于 2013-03-25T12:48:24.003 回答