1

ディレクトリ内で見つかったすべての画像を文字列配列に入力したいと思います。

今まで私はjpg形式ですべての画像を取得するために以下を使用します

Dim List() as string = Directory.GetFiles(Path, "*.jpg")

今、私はそれを拡張して、すべての画像形式を取得したいと思います。

ImageFormatdirectory.GetFilesを「列挙型」と組み合わせて使用​​できますか?

4

2 に答える 2

1

こんにちは、http: //msdn.microsoft.com/en-us/library/wz42302f.aspxでコミュニティコンテンツとして見つけたこれを使用できます。

private static string[] GetFiles(string sourceFolder, string filters)
{
   return filters.Split('|').SelectMany(filter => System.IO.Directory.GetFiles(sourceFolder, filter)).ToArray();
}

遅延評価を使用する代替手段(.Net 4.0のみ):

private static IEnumerable<string> GetFiles(string sourceFolder, string filters)
{
   return filters.Split('|').SelectMany(filter => System.IO.Directory.EnumerateFiles(sourceFolder, filter));
}

のように使用できますGetFiles("dir", "*.jpg|*.gif|*.jpeg|*.bmp|*.png")。これは基本的に各フィルターの検索にすぎないため、取得できるほど効率的ではありません。

最終バージョンは次のとおりです(.Net 4.0のみですが、少なくとも2.0ソリューションにすることができます)。

private static IEnumerable<string> GetImageFiles(string sourceFolder)
{
   return from file in System.IO.Directory.EnumerateFiles(sourceFolder)
          let extension = Path.GetExtension(file)
          where extension == ".jpg" || extension == ".gif" || extension == ".png"
          select file;
}

ループは1回だけなので、最後のものが最速だと思います。ただし、これはパターン検索がどのように実装されDirectoryているか、およびOSがどのように検索するかによって異なります。私が行っていないパフォーマンステストが必要です。

于 2011-02-12T14:09:07.697 に答える
0

これは2.0.netソリューションです。

私はC#で同様のことをしました。このソリューションでは、処理する画像のドロップオフポイントとしてフォルダーを使用しました。各タイプのファイルを画像としてロードすることは、すべての場合に正しい解決策ではありませんが、各ファイルをロード可能な画像として検証したかったのです。

    string[] files = Directory.GetFiles(folderPath);
    foreach(string file in files)
    {


        System.Drawing.Image img = null;

        try
        {
            img = System.Drawing.Image.FromFile(file);
        }
        catch
        {
            // do nothing
        }

        if (img != null)
        {
            // did something

            img.Dispose();
        }
    }

ピースを忘れてしまったことがわかりました...ファイルを処理する前に、処理中のファイルを制限する関数を使用しました。

private bool IsImage(FileInfo file)
{
    bool imageFile = false;
    if ((file.Extension.ToLower() ==".jpg")||
       (file.Extension.ToLower() ==".gif")||
       (file.Extension.ToLower() == ".bmp") ||
       (file.Extension.ToLower() ==".png"))
    {
        imageFile = true;
    }

    return imageFile;
}
于 2011-02-12T14:23:54.847 に答える