将多页Tiffs分隔成单独的页面

本文关键字:单独 分隔 Tiffs | 更新日期: 2023-09-27 18:21:09

当前我正在使用.NET将多页tiff分解为单独的jpeg/png。这个过程本身就很好。但几周后,我注意到页面大小有一个很大的缺陷。我分离的每一页都与整个TIFF文档的组合相同(宽度/高度非文件大小)。显示TIFF时,会在图像的右侧/底部创建一个巨大的黑点。这是一个很大的缺陷,因为我无法确定每个页面的物理尺寸,因为我正在分离它们。如果我提前知道,我至少可以写一些裁剪机制。如有任何建议,不胜感激。

        System.IO.Stream s =
            new System.IO.MemoryStream(imageData);
        System.Drawing.Image i =
            System.Drawing.Image.FromStream(s);
        int NumberOfFrames = i.GetFrameCount(System.Drawing.Imaging.FrameDimension.Page);
        List<byte[]> imageCollection = new List<byte[]>();
        for (int f = 0; f < NumberOfFrames; f++)
        {
            i.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Page, f);
            Bitmap b = new Bitmap(i.Width, i.Height);
            Graphics g = Graphics.FromImage(b);
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Default;
            g.DrawImageUnscaled(i, 0, 0);
            g.Dispose();
           imageCollection.Add((byte[])System.ComponentModel.TypeDescriptor.GetConverter(b).ConvertTo(b, typeof(byte[])));
        }
        return imageCollection;

将多页Tiffs分隔成单独的页面

我不确定问题描述,但听起来你要拆分的页面中有alpha通道数据。听起来你没有正确处理,所以生成的位图在应该透明的地方显示默认的黑色。

如果是这样的话,那么:

1) 修复提取器以正确处理alpha通道

2) 编写一个方法,找到最小的边界框,使框中的alpha数量最小化,然后将图像裁剪到该框中。