c# tiff system.drawing

c# - ¿Cómo abrir una imagen de formato de imagen TIFF de múltiples cuadros en.NET 2.0?



system.drawing (3)

Image.FromFile(@"path/filename.tif")

o

Image.FromStream(memoryStream)

ambos producen objetos de imagen con solo un fotograma, aunque la fuente sea un archivo TIFF de fotogramas múltiples. ¿Cómo se carga un archivo de imagen que conserva estos marcos? Los tiffs se guardan utilizando los métodos Image.SaveAdd cuadro por cuadro. Funcionan en otros visores pero los métodos de imagen .NET no cargarán estos marcos, solo el primero.

¿Significa esto que no hay forma de devolver un TIFF de cuadros múltiples desde un método en el que estoy pasando una colección de mapas de bits para usarlos como marcos?


Esto es lo que uso:

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; }


bitmap.Dispose ();

Después del bucle For, debe deshacerse del mapa de bits. De lo contrario, obtendrá un "archivo de error usando otro proceso" cuando intente usar el mismo archivo en otro proceso.


Pude manejar el tiff multi-frame usando el siguiente método.

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();

No he probado la solución en .net 2.0, pero MSDN muestra que los miembros de la clase existen. Solucionó mi problema en .net 4.5.2.