如何在.NET 2.0 中打开多帧 TIFF 图像格式图像?

发布于 2024-07-11 18:39:18 字数 342 浏览 11 评论 0原文

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

或者

Image.FromStream(memoryStream)

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

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

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

or

Image.FromStream(memoryStream)

both produce image objects with only one frame even though the source is a multi-frame TIFF file. How do you load an image file that retains these frames? The tiffs are saved using the Image.SaveAdd methods frame by frame. They work in other viewers but .NET Image methods will not load these frames, only the first.

Does this mean that there is no way to return a multi-frame TIFF from a method where I am passing in a collection of bitmaps to be used as frames?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

残龙傲雪 2024-07-18 18:39:18

这是我使用的:

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;
}

Here's what I use:

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;
}
毁虫ゝ 2024-07-18 18:39:18

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

I was able to handle the multi-frame tiff by using the below method.

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(); 

I have not tried the solution in .net 2.0 but MSDN shows the class members to exist. It did fix my problem in .net 4.5.2.

凹づ凸ル 2024-07-18 18:39:18

位图.Dispose();

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

bitmap.Dispose();

After For loop you need to Dispose bitmap. Otherwise you get error "file using other process" when try to use same file in other process.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文