.NET 2.0でマルチフレームTIFF画像形式の画像を開く方法
-
03-07-2019 - |
質問
Image.FromFile(@"path\filename.tif")
または
Image.FromStream(memoryStream)
両方とも、ソースがマルチフレームTIFFファイルであっても、1フレームのみの画像オブジェクトを生成します。 これらのフレームを保持する画像ファイルをどのようにロードしますかフレームごとにImage.SaveAddメソッドを使用してTIFFを保存します。他のビューアでも機能しますが、.NET Imageメソッドはこれらのフレームをロードせず、最初のフレームのみをロードします。
これは、フレームとして使用されるビットマップのコレクションを渡すメソッドからマルチフレームTIFFを返す方法がないことを意味しますか?
解決
使用するものは次のとおりです。
private List<Image> GetAllPages(string file)
{
List<Image> images = new List<Image>();
Bitmap bitmap = (Bitmap)Image.FromFile(file);
int count = bitmap.GetFrameCount(FrameDimension.Page);
for (int idx = 0; idx < count; idx++)
{
// save each frame to a bytestream
bitmap.SelectActiveFrame(FrameDimension.Page, idx);
MemoryStream byteStream = new MemoryStream();
bitmap.Save(byteStream, ImageFormat.Tiff);
// and then create a new Image from it
images.Add(Image.FromStream(byteStream));
}
return images;
}
他のヒント
以下の方法を使用して、マルチフレームTIFFを処理できました。
Image multiImage = Image.FromFile(sourceFile);
multiImage.Save(destinationFile, tiff, prams);
int pageCount = multiImage.GetFrameCount(FrameDimension.Page);
for (int page = 1; page < pageCount; page++ )
{
multiImage.SelectActiveFrame(FrameDimension.Page,page);
multiImage.SaveAdd(dupImage,prams);
}
multiImage.SaveAdd(newPage, prams);
multiImage.Dispose();
.net 2.0で解決策を試したことはありませんが、MSDNはクラスメンバーが存在することを示しています。 .net 4.5.2の問題は修正されました。
bitmap.Dispose();
Forループの後、ビットマップを破棄する必要があります。そうしないと、「他のプロセスを使用しているファイル」エラーが発生します。他のプロセスで同じファイルを使用しようとしたとき。
所属していません StackOverflow