2010-08-03 7 views
4

Avoir un tiff multi pages et je veux extraire la page [n]/frame [n] de ce fichier Tiff et enregistrez-le.Extrait de plusieurs pages tiff - C#

Si mon tiff multi page a 3 images, après avoir extrais une page/cadre - Je veux rester avec

1 image ayant 2 pages/images et

1 image ayant seulement 1 page/Cadre.

Répondre

6

Voici un code pour enregistrer la dernière image dans un tiff multi-trame à un fichier tiff d'une seule page. (Pour utiliser ce code, vous devez ajouter une référence à PresentationCore.dll).

Stream imageStreamSource = new FileStream(imageFilename, FileMode.Open, FileAccess.Read, FileShare.Read); 
     MemoryStream memstream = new MemoryStream(); 
     memstream.SetLength(imageStreamSource.Length); 
     imageStreamSource.Read(memstream.GetBuffer(), 0, (int)imageStreamSource.Length); 
     imageStreamSource.Close(); 

     BitmapDecoder decoder = TiffBitmapDecoder.Create(memstream,BitmapCreateOptions.PreservePixelFormat,BitmapCacheOption.Default); 

     Int32 frameCount = decoder.Frames.Count; 

     BitmapFrame imageFrame = decoder.Frames[0]; 

     MemoryStream output = new MemoryStream(); 
     TiffBitmapEncoder encoder = new TiffBitmapEncoder(); 
     encoder.Frames.Add(imageFrame); 
     encoder.Save(output); 

     FileStream outStream = File.OpenWrite("Image.Tiff"); 
     output.WriteTo(outStream); 
     outStream.Flush(); 
     outStream.Close(); 
     output.Flush(); 
     output.Close(); 
+1

Pour utiliser ce code, vous devez ajouter une référence à la PresentationCore.dll qui se trouve dans votre « [Program Files]/Assemblées de référence » dossier. Cet assembly contient l'espace de noms 'System.Windows.Media.Imaging'. – Crackerjack

1
public void SaveFrame(string path, int frameIndex, string toPath) 
    { 
     using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read)) 
     { 
      BitmapDecoder dec = BitmapDecoder.Create(stream, BitmapCreateOptions.IgnoreImageCache, BitmapCacheOption.None); 
      BitmapEncoder enc = BitmapEncoder.Create(dec.CodecInfo.ContainerFormat); 

      enc.Frames.Add(dec.Frames[frameIndex]); 

      using (FileStream tmpStream = new FileStream(toPath, FileMode.Create)) 
      { 
       enc.Save(tmpStream); 
      } 
     } 
    } 
Questions connexes