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

或者

Image.FromStream(memoryStream)

即使源是多帧 TIFF 文件,两者都会产生只有一帧的图像对象。如何加载保留这些帧的图像文件?使用 Image.SaveAdd 方法逐帧保存 tiff。它们在其他查看器中工作,但 .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

位图.Dispose();

在 For 循环之后,您需要 Dispose 位图。否则,当尝试在其他进程中使用相同的文件时,您会收到错误“使用其他进程的文件”。

于 2016-12-02T07:44:45.917 回答