Печать tiff документов (wpf)

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Markup;
using System.IO;
using System.Windows.Media.Imaging;
using System.Collections.Generic;


namespace WpfControls.CommonClasses
{
    public class TiffDocumentPrinter: IDisposable
    {
        private string _documentPath;
        private PrintDialog _printDialog;
        private List<Stream> _streams;

        public TiffDocumentPrinter(string documentPath)
        {
            _documentPath = documentPath;
            _printDialog = new PrintDialog();
            _streams = new List<Stream>();
        }

        public void Print()
        {
            if (_printDialog.ShowDialog() != true) return;

            List<Image> images = CreateImages(_documentPath);
            FixedDocument document = CreateFixedDocument(images);

            _printDialog.PrintDocument(document.DocumentPaginator, string.Empty);
        }

        public void Dispose()
        {
            foreach(var stream in _streams)
            {
                stream.Dispose();
            }
            _streams.Clear();
        }

        private Stream CreateMemmoryStream(BitmapSource writeBmp)
        {
            MemoryStream memmoryStream = new MemoryStream();
            _streams.Add(memmoryStream);

            BitmapEncoder enc = new BmpBitmapEncoder();
            enc.Frames.Add(BitmapFrame.Create(writeBmp));
            enc.Save(memmoryStream);
            memmoryStream.Position = 0;
            return memmoryStream;
        }

        private Image CreateImage(BitmapSource writeBmp)
        {
            Stream memmoryStream = CreateMemmoryStream(writeBmp);

            Image image = new Image();
            var imageSource = new BitmapImage();
            imageSource.BeginInit();
            imageSource.StreamSource = memmoryStream;
            imageSource.EndInit();
            image.Source = imageSource;

            return image;
        }

        private List<Image> CreateImages(string documentPath)
        {
            Stream imageStreamSource = new FileStream(documentPath, FileMode.Open, FileAccess.Read, FileShare.Read);
            TiffBitmapDecoder decoder = new TiffBitmapDecoder(imageStreamSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);

            List<Image> images = new List<Image>();
            foreach (var bitmapFrame in decoder.Frames)
            {
                images.Add(CreateImage(bitmapFrame));
            }
            return images;
        }

        private FixedDocument CreateFixedDocument(List<Image> images)
        {
            FixedDocument document = new FixedDocument();
            document.DocumentPaginator.PageSize = new Size(_printDialog.PrintableAreaWidth, _printDialog.PrintableAreaHeight);

            foreach (var image in images)
            {
                FixedPage page = new FixedPage();
                page.Width = document.DocumentPaginator.PageSize.Width;
                page.Height = document.DocumentPaginator.PageSize.Height;

                page.Children.Add(image);
                PageContent pageContent = new PageContent();
                ((IAddChild)pageContent).AddChild(page);
                document.Pages.Add(pageContent);

            }
            return document;
        }

    }
}