2008-12-30 27 views
9
Image.FromFile(@"path\filename.tif") 

如何在.NET 2.0中打开多帧TIFF图像格式图像?

Image.FromStream(memoryStream) 

都产生图像对象用即使源是一个多帧TIFF文件仅一个帧。 如何加载保留这些帧的图像文件?使用Image.SaveAdd方法逐帧保存tiff。他们在其他查看器中工作,但.NET Image方法不会加载这些帧,只有第一个。

这是否意味着我没有办法从一个方法中返回一个多帧TIFF,在这个方法中我传入一组要用作帧的位图?

回答

22

这是我使用:

private List<Image> GetAllPages(string file) 
{ 
    List<Image> images = new List<Image>(); 
    Bitmap bitmap = (Bitmap)Image.FromFile(file); 
    int count = bitmap.GetFrameCount(FrameDimension.Page); 
    for (int idx = 0; idx < count; idx++) 
    { 
     // save each frame to a bytestream 
     bitmap.SelectActiveFrame(FrameDimension.Page, idx); 
     MemoryStream byteStream = new MemoryStream(); 
     bitmap.Save(byteStream, ImageFormat.Tiff); 

     // and then create a new Image from it 
     images.Add(Image.FromStream(byteStream)); 
    } 
    return images; 
} 
+0

这是否意味着我没有办法从一个方法中返回一个多帧TIFF,在这个方法中,我传入一组要用作帧的位图集合? – mirezus 2008-12-30 21:38:02

0

bitmap.Dispose();

For循环后,您需要处理位图。否则,当您尝试在其他进程中使用相同的文件时,您会收到错误“使用其他进程的文件”。

1

我能够通过使用下面的方法来处理多帧tiff。

Image multiImage = Image.FromFile(sourceFile); 

multiImage.Save(destinationFile, tiff, prams); 

int pageCount = multiImage.GetFrameCount(FrameDimension.Page); 

for (int page = 1; page < pageCount; page++) 
{ 
    multiImage.SelectActiveFrame(FrameDimension.Page,page); 
    multiImage.SaveAdd(dupImage,prams); 
} 

multiImage.SaveAdd(newPage, prams); 
multiImage.Dispose(); 

我还没有尝试在.net 2.0中的解决方案,但MSDN显示类成员存在。它确实解决了我在.net 4.5.2中的问题。