0

私はすでにそれを持っているので、tiffファイルを作成する必要はありません。ディレクトリ内のファイル名のプレフィックスに基づいてファイルを作成するアルゴリズムを理解しようとしています。

というフォルダがありますC:\Policy Images。このフォルダには写真があります。写真の名前は次のとおりです。

ポリシー番号/画像名自体:

AAAAAAA-Pic1
AAAAAAA-Pic2
AAAAAAA-Pic3
ZZZZZZZ-Pic1
ZZZZZZZ-Pic2
FFFFFFF-Pic1
...

tiffファイルを作成するとき、ポリシー番号ごとに1つのtiffを作成する必要があります。上記に基づいて、たとえば、Idは次のようになります。

 AAAAAAA-1 (containing 3 pages in this tiff file) 
 ZZZZZZZ-1 (containing 2 pages in this tiff file) 
 FFFFFFF-1 (containing 1 page in this tiff file)

以下の私のコードの問題は、ポリシー番号に基づいていない、ディレクトリ内のすべてのファイルのtiffを作成していることです。「」と書かれているコードの部分は、foreach (string s in AllFilesInDirectory)実際に存在する必要がありますforeach(ポリシー1/ポリシー2/ポリシー3の文字列sなど)。

どのくらい正確にそれをしますか?今、壁に頭をぶつけています。

これは私がこれまでに持っているものです:

string[] AllFilesInDirectory = Directory.GetFiles(SelectedDirectory);

//get the codec for tiff files
ImageCodecInfo info = null;

foreach (ImageCodecInfo ice in ImageCodecInfo.GetImageEncoders())
         if (ice.MimeType == "image/tiff")
         info = ice;

//use the save encoder
Encoder enc = Encoder.SaveFlag;

EncoderParameters ep = new EncoderParameters(1);
ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.MultiFrame);

Bitmap pages = null;

int frame = 0;

foreach (string s in AllFilesInDirectory)
{
   if (frame == 0)
   {
      pages = (Bitmap)Image.FromFile(s);
      //save the first frame
      pages.Save(AppVars.MergedPolicyImagesFolder + "\\" + PolicyNumber + ".tiff", info, ep);
     PolicyNumber++;
   }
   else
   {
      //save the intermediate frames
      ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.FrameDimensionPage);
      Bitmap bm = (Bitmap)Image.FromFile(s);
      pages.SaveAdd(bm, ep);
   }

   if (frame == AllFilesInDirectory.Length - 1)
   {
      //flush and close.
      ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.Flush);
      pages.SaveAdd(ep);
   }
 frame++;
}
4

1 に答える 1

1

あなたの目標を達成するために、あなたは最初にファイル名を分割するいくつかの手段を必要とします。次のコードでは、例として示したパターンに依存しています。実際のファイル名のパターンが異なる場合は、コードの分割部分を適応させる必要があります(正規表現を使用する場合もあります)。分割後、ポリシーでグループ化する必要があります。GroupByC#では、LINQのおかげで、これは拡張メソッドを使用して実行されます。一般的な考え方を示す小さなコードスニペットを次に示します。

var data = new [] {
    "AAAAAAA-Pic1",
    "AAAAAAA-Pic2",
    "AAAAAAA-Pic3",
    "ZZZZZZZ-Pic1",
    "ZZZZZZZ-Pic2",
    "FFFFFFF-Pic1"
};

var splittedEntries = data.Select(entry => {
    var parts = entry.Split('-'); // adapt to real pattern of filenames
    return new { Policy = parts[0], Picture = parts[1] };
});

var groups = splittedEntries.GroupBy(entry => entry.Policy);
foreach (var grp in groups) {
    Console.WriteLine("Do somethin for group {0}", grp.Key);
    foreach (var entry in grp) {
        Console.WriteLine("  * {0}", entry.Picture);
    }
}
于 2012-07-23T14:15:33.380 に答える