将多页TIFF转换为PNG .Net

myt*_*nts 7 .net png tiff multipage

我可以将单页TIFF转换为.Net中的PNG,但是,我如何为多页TIFF执行此操作?

小智 8

谢谢@Tom Halladay

我将提供您的代码的ac#版本

private static Bitmap ConvertTiffToBitmapStream(byte[] tiffImage){
    System.Drawing.Image ImageBitmap = Bitmap.FromStream(new MemoryStream(tiffImage));
    int FrameCount = ImageBitmap.GetFrameCount(FrameDimension.Page);
    int RunningHeight = 0;
    int MaxWidth = 0;

    for (int MeasurementFrameIndex = 0; MeasurementFrameIndex <= FrameCount - 1; MeasurementFrameIndex++){
        ImageBitmap.SelectActiveFrame(FrameDimension.Page, MeasurementFrameIndex);
        RunningHeight += ImageBitmap.Height;
        MaxWidth = Math.Max(MaxWidth, ImageBitmap.Width);
    }

    Bitmap CombinedBitmap = new Bitmap(MaxWidth, RunningHeight);
    int RunningVerticalPosition = 0;

    for (int CombinationFrameIndex = 0; CombinationFrameIndex <= FrameCount - 1; CombinationFrameIndex++){
        ImageBitmap.SelectActiveFrame(FrameDimension.Page, CombinationFrameIndex);
        EmbedBitmap(new Bitmap(ImageBitmap), ref CombinedBitmap, RunningVerticalPosition);
        RunningVerticalPosition += ImageBitmap.Height + 1;
    }
    return CombinedBitmap;
}

private static void EmbedBitmap(Bitmap SourceBitmap, ref Bitmap DestinationBitmap, int VerticalPosition){
    Rectangle SourceRectangle = new Rectangle(new Point(0, 0), new Size(SourceBitmap.Width, SourceBitmap.Height));
    Rectangle DestinationRectangle = new Rectangle(new Point(0, VerticalPosition), new Size(SourceBitmap.Width, SourceBitmap.Height));

    using (Graphics Canvas = Graphics.FromImage(DestinationBitmap)){
        Canvas.DrawImage(SourceBitmap, DestinationRectangle, SourceRectangle, GraphicsUnit.Pixel);
    }
}
Run Code Online (Sandbox Code Playgroud)


Bob*_*sky 6

您应该在循环中选择活动框架(页面)并将每个tiff页面转换为png.

int pageCount = 1;
try
{
    pageCount = bmp.GetFrameCount(FrameDimension.Page);
}
catch (Exception)
{
    // sometimes GDI+ throws internal exceptions.
    // just ignore them.
}

for (int page = 0; page < pageCount; page++)
{
    bmp.SelectActiveFrame(FrameDimension.Page, page);
    // save or otherwise process tiff page
}
Run Code Online (Sandbox Code Playgroud)

此代码假定您可以在System.Drawing.Bitmap对象中加载Tiff图像.