首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

GDI+ 進階議題:多幀影像處理——TIFF 多頁與 GIF 動畫限制

     編輯:關於.NET

7. 多幀影像

多幀影像指單一檔案包含多個畫面,支援格式僅 TIFF 與 GIF。GDI+ 可生成多頁 TIFF,但無法原生生成 GIF 動畫(疑因專利限制)。

生成多頁 TIFF

public void CreateMultiframeTIFF(string resultImage, string image1, params string[] images)
{
    Image frame1 = Image.FromFile(image1);
    int len = images.Length;
    Image[] frames = new Image[len];
    for (int i = 0; i < len; i++) frames[i] = Image.FromFile(images[i]);

    Bitmap bmpResult = (Bitmap)frame1;
    EncoderParameters ep = new EncoderParameters(1);
    ep.Param[0] = new EncoderParameter(Encoder.SaveFlag, (long)EncoderValue.MultiFrame);

    // 尋找 TIFF 編碼器
    var codecs = new List<ImageCodecInfo>(ImageCodecInfo.GetImageEncoders());
    ImageCodecInfo tiffCodec = codecs.Find(c => c.MimeType.Equals("image/tiff", StringComparison.OrdinalIgnoreCase));

    // 儲存第一幀
    bmpResult.Save(resultImage, tiffCodec, ep);

    // 追加後續幀
    ep.Param[0] = new EncoderParameter(Encoder.SaveFlag, (long)EncoderValue.FrameDimensionPage);
    foreach (Image frame in frames) bmpResult.SaveAdd(frame, ep);

    // 刷新流
    ep.Param[0] = new EncoderParameter(Encoder.SaveFlag, (long)EncoderValue.Flush);
    bmpResult.SaveAdd(ep);

    // 釋放資源
    frame1.Dispose();
    foreach (Image f in frames) f.Dispose();
    bmpResult.Dispose();
}

讀取多幀 TIFF / GIF

// TIFF 使用 FrameDimension.Page
int count = bmp.GetFrameCount(FrameDimension.Page);
bmp.SelectActiveFrame(FrameDimension.Page, 1); // 選取第 2 幀

// GIF 動畫使用 FrameDimension.Time
int count = bmp.GetFrameCount(FrameDimension.Time);
bmp.SelectActiveFrame(FrameDimension.Time, 1);

GIF 動畫生成雖無內建方法,但可透過底層實現(待後續機會分享)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved