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#で画像処理をしています。ディレクトリから各画像を処理するループがあります..画像のファイル名は数字です..しかし、それらをロードできません..どうすればよいですか..ループに入っていないときに機能します..電話

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

正常に動作しています..1つの画像のみ..しかし、動的にしたいので、どうすればよいですか? Plsは私を助けて..ありがとう.

4

2 に答える 2

0

あなたのコードは

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

ファイル名を生成します。この結果の入力値の場合1、文字列は"01". これは、フォーマット文字列に先行ゼロが明示的に含まれているためです。

したがって、問題は整数から文字列への変換に要約されます。先行ゼロを持たない変換が必要です。例えば:

s.ToString()

または、数値を変換して拡張子を一度に追加するという利便性が必要な場合は、

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

format アイテムの構文は次のとおりです。

{ index[,alignment][ :formatString] }

したがって、{0}インデックスのみが含まれ、 が省略されているformatStringため、デフォルトの書式設定はToString()オブジェクトを呼び出すことによって実行されます。したがって、上記の への呼び出しstring.Format()は、次のように記述する便利な方法にすぎません。

s.ToString() + '.png'

一般的なアドバイスとして、デバッガーを最大限に活用する方法を学ぶために時間を割くことをお勧めします。ファイル名変数の値を調べると、先頭に誤ったゼロが表示されていることがすぐにわかります。デバッガーを使用してコードの問題を調査する方法を学習すると、大きなメリットが得られます。

于 2013-03-25T12:53:43.513 に答える
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

于 2013-03-25T12:48:24.003 に答える