在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");
它在一个图像中工作得很好,但我想让它是动态的,所以我该怎么做?
你的代码使用
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
你的循环值