16
Image.FromFile(@"path\filename.tif")

また

Image.FromStream(memoryStream)

ソースが複数フレームの TIFF ファイルであっても、どちらも 1 フレームのみのイメージ オブジェクトを生成します。これらのフレームを保持する画像ファイルをどのようにロードしますか? TIFF は、フレームごとに Image.SaveAdd メソッドを使用して保存されます。これらは他のビューアで機能しますが、.NET Image メソッドはこれらのフレームをロードせず、最初のフレームのみをロードします。

これは、フレームとして使用するビットマップのコレクションを渡すメソッドからマルチフレーム TIFF を返す方法がないということですか?

4

3 に答える 3

32

これが私が使用するものです:

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;
}
于 2008-12-30T21:31:37.897 に答える
4

以下の方法でマルチフレーム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 で私の問題を修正しました。

于 2016-12-28T16:41:50.943 に答える
-1

bitmap.Dispose();

For ループの後、ビットマップを破棄する必要があります。そうしないと、他のプロセスで同じファイルを使用しようとすると、「他のプロセスを使用しているファイル」というエラーが発生します。

于 2016-12-02T07:44:45.917 に答える