将多页Tiff分成单独的页面

时间:2012-01-20 18:24:14

标签: c# .net vb.net

目前我正在使用.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;

1 个答案:

答案 0 :(得分:0)

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

如果是这样的话,那么:

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

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