Dot-Net

將多頁 TIFF 轉換為 PNG .Net

  • June 10, 2022

我可以在 .Net 中將單頁 TIFF 轉換為 PNG,但是,我將如何為多頁 TIFF 執行此操作?

您應該在循環中選擇活動框架(頁面)並將每個 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
}

此程式碼假定您可以在 System.Drawing.Bitmap 對像中載入 Tiff 圖像。

謝謝@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);
   }
}

引用自:https://stackoverflow.com/questions/3566650