2012-10-16 2 views
3

Я пишу код для объединения одного файла tiff для многостраничного tiff. но вывод идет с пустыми страницами в конце. код работает нормально, если входные файлы черные & Белый, но не для цветных .tiff файлов. например, если я даю 100 файлов, а в качестве входных данных для одного файла tiff выходят 47 страниц, а остальные из них пусты.Многостраничная программа tiff Пустые страницы

Я использую стандартный код для достижения этой функции, следуя моему коду. Кто-нибудь думает, почему?

using (FileStream fs = new FileStream(fileNameTemp, FileMode.Append, FileAccess.Write)) 
     { 
      System.Windows.Media.Imaging.TiffBitmapEncoder tifEnc = new System.Windows.Media.Imaging.TiffBitmapEncoder(); 
      tifEnc.Compression = System.Windows.Media.Imaging.TiffCompressOption.Default; 

      foreach (string fileName1 in filePaths) 
      { 
       Console.WriteLine("FileName:::" + fileName1); 

       System.Windows.Media.Imaging.BitmapImage bmpImg = new System.Windows.Media.Imaging.BitmapImage(); 
       bmpImg.BeginInit(); 
       bmpImg.CacheOption = System.Windows.Media.Imaging.BitmapCacheOption.OnLoad; 
       bmpImg.UriSource = new Uri(fileName1); 
       bmpImg.EndInit(); 

       System.Windows.Media.Imaging.FormatConvertedBitmap fcb = new System.Windows.Media.Imaging.FormatConvertedBitmap(bmpImg, 
                System.Windows.Media.PixelFormats.Rgb24, 
                System.Windows.Media.Imaging.BitmapPalettes.Halftone27, 
                1.0); 
       tifEnc.Frames.Add(System.Windows.Media.Imaging.BitmapFrame.Create(fcb)); 



      } 

      tifEnc.Save(fs); 
      fs.Dispose(); 


     } 

Заранее благодарен!

ответ

0

В примере ниже BitmapImage не загружается, когда вы делаете bitmapImage.EndInit(), поскольку он, кажется, делает ленивую загрузку. Если поток памяти расположен, то страницы, которые я получаю, также белые, потому что изображение не загружено. Второй метод принимает путь к файлу назначения и список источников.

 public static BitmapImage LoadImage(byte[] bytes) 
     { 
      var memoryStream = new MemoryStream(bytes); 

      var bitmapImage = new BitmapImage(); 
      bitmapImage.BeginInit(); 
      bitmapImage.StreamSource = memoryStream; 
      bitmapImage.EndInit(); 
      return bitmapImage;    
     } 

     public static void CreateTiff(string destPath, params string[] filePaths) 
     { 
      using (FileStream fs = new FileStream(destPath, FileMode.Append, 
                  FileAccess.Write)) 
      { 
       var tifEnc = new TiffBitmapEncoder(); 
       tifEnc.Compression = TiffCompressOption.Default; 

       foreach (string fileName in filePaths) 
       { 
        var image = LoadImage(File.ReadAllBytes(fileName)); 

        tifEnc.Frames.Add(BitmapFrame.Create(image)); 
       } 

       tifEnc.Save(fs); 
      } 

     } 
Смежные вопросы