【问题标题】:How to open a multi-frame TIFF imageformat image in .NET 2.0?如何在 .NET 2.0 中打开多帧 TIFF 图像格式图像?
【发布时间】:2008-12-30 21:25:33
【问题描述】:
Image.FromFile(@"path\filename.tif")

Image.FromStream(memoryStream)

即使源是多帧 TIFF 文件,两者都会生成只有一帧的图像对象。 如何加载保留这些帧的图像文件? 使用 Image.SaveAdd 方法逐帧保存 tiff。它们在其他查看器中工作,但 .NET Image 方法不会加载这些帧,只会加载第一个。

这是否意味着无法从我传递位图集合以用作帧的方法返回多帧 TIFF?

【问题讨论】:

    标签: c# tiff system.drawing


    【解决方案1】:

    这是我使用的:

    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?
    • 几乎是的 - 您必须记住,在多帧 TIFF 中,每个帧都可以有自己的一组编码选项(压缩、颜色、质量)。另一方面,位图是更简单的动物。
    【解决方案2】:

    我可以使用以下方法处理多帧 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 中的问题。

    【讨论】:

    • 什么是 dupImage?
    【解决方案3】:

    bitmap.Dispose();

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多