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");
工作正常..仅在一张图片中..但我希望它是动态的,所以我该怎么办?请帮助我......谢谢。
答案 0 :(得分:0)
假设您的文件名例如为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
循环值。
答案 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'
作为一般建议,我建议您花点时间学习如何充分利用调试器。如果您检查了文件名变量的值,您会立即看到错误的前导零。通过学习如何使用调试器来调查代码问题,您将从中受益匪浅。