Example #1
0
 public static IEnumerable<Bitmap> ToBitmap(string filename, Parameters parameters)
 {
     using (var xpsConverter = new Xps2Image(filename))
     {
         return xpsConverter.ToBitmap(parameters).ToList();
     }
 }
Example #2
0
 public static IEnumerable<Bitmap> ToBitmap(Stream stream, Parameters parameters)
 {
     using (var xpsConverter = new Xps2Image(stream))
     {
         return xpsConverter.ToBitmap(parameters).ToList();
     }
 }
Example #3
0
 public static IEnumerable<Bitmap> ToBitmap(byte[] byteArray, Parameters parameters)
 {
     using (var xpsConverter = new Xps2Image(byteArray))
     {
         return xpsConverter.ToBitmap(parameters).ToList();
     }
 }
Example #4
0
        private RenderTargetBitmap GetPageBitmap(DocumentPaginator documentPaginator, int pageNumber, Parameters parameters)
        {
            const double dpiConst = 96.0;

            double dpi = parameters.Dpi;

            var size = parameters.RequiredSize ?? new Size();

            Func<int, bool> isSizeDefined = requiredSize => requiredSize > 0;
            Action<int, double> calcDpi = (requiredSize, pageSize) =>
            {
                if (isSizeDefined(requiredSize))
                {
                    dpi = (requiredSize / pageSize) * dpiConst;
                }
            };

            try
            {
                using (var page = documentPaginator.GetPage(pageNumber))
                {
                    if (!size.IsEmpty)
                    {
                        var portrait = page.Size.Height >= page.Size.Width;

                        if (portrait || !isSizeDefined(size.Width))
                        {
                            calcDpi(size.Height, page.Size.Height);
                        }

                        if (!portrait || !isSizeDefined(size.Height))
                        {
                            calcDpi(size.Width, page.Size.Width);
                        }
                    }

                    var ratio = dpi / dpiConst;

                    var bitmap = new RenderTargetBitmap((int)Math.Round(page.Size.Width * ratio),
                                                        (int)Math.Round(page.Size.Height * ratio), dpi, dpi, PixelFormats.Pbgra32);

                    bitmap.Render(page.Visual);

                    // Memory leak fix.
                    // http://social.msdn.microsoft.com/Forums/en/wpf/thread/c6511918-17f6-42be-ac4c-459eeac676fd
                    ((FixedPage)page.Visual).UpdateLayout();

                    return bitmap;

                }
            }
            catch (XamlParseException ex)
            {
                throw new ConversionException(ex.Message, pageNumber + 1, ex);
            }
        }
Example #5
0
        private Bitmap ProcessPage(Parameters parameters, int docPageNumber)
        {
            var bitmapEncoder = CreateEncoder(parameters.ImageType, parameters.ImageOptions);
            var bitmapSource = GetPageBitmap(_xpsDocumentPaginator, docPageNumber, parameters);

            using (var stream = new MemoryStream())
            {
                bitmapEncoder.Frames.Add(BitmapFrame.Create(bitmapSource));
                bitmapEncoder.Save(stream);

                return new Bitmap(stream);
            }
        }
Example #6
0
        public IEnumerable<Bitmap> ToBitmap(Parameters parameters)
        {
            var pages = new List<Bitmap>();
            var thread = new Thread(() =>
            {
                const string inMemoryPackageName = "memorystream://inmemory.xps";
                var packageUri = new Uri(inMemoryPackageName);
                using (var package = Package.Open(_xpsDocumentInMemoryStream))
                {
                    PackageStore.AddPackage(packageUri, package);

                    _xpsDocument = new XpsDocument(package, CompressionOption.Normal, inMemoryPackageName);
                    _xpsDocumentPaginator = _xpsDocument.GetFixedDocumentSequence().DocumentPaginator;

                    for (var docPageNumber = 0; docPageNumber < PageCount; docPageNumber++)
                    {
                        pages.Add(ProcessPage(parameters, docPageNumber));
                    }

                    PackageStore.RemovePackage(packageUri);

                    _xpsDocument.Close();
                    _xpsDocument = null;
                }
            });
            thread.SetApartmentState(ApartmentState.STA);
            thread.Start();
            thread.Join();
            return pages;
        }
Example #7
0
 public static IEnumerable<Bitmap> ToBitmap(IEnumerable<byte[]> byteArrays, Parameters parameters)
 {
     foreach (var byteArray in byteArrays)
     {
         using (var xpsConverter = new Xps2Image(byteArray))
         {
             return xpsConverter.ToBitmap(parameters).ToList();
         }
     }
     return new List<Bitmap>();
 }
Example #8
0
 public static IEnumerable<Bitmap> ToBitmap(IEnumerable<Stream> streams, Parameters parameters)
 {
     foreach (var stream in streams)
     {
         using (var xpsConverter = new Xps2Image(stream))
         {
             return xpsConverter.ToBitmap(parameters).ToList();
         }
     }
     return new List<Bitmap>();
 }
Example #9
0
 public static IEnumerable<Bitmap> ToBitmap(IEnumerable<string> filenames, Parameters parameters)
 {
     foreach (var filename in filenames)
     {
         using (var xpsConverter = new Xps2Image(filename))
         {
             return xpsConverter.ToBitmap(parameters).ToList();
         }
     }
     return new List<Bitmap>();
 }
Example #10
0
        public IEnumerable<Bitmap> ToBitmap(Parameters parameters)
        {
            const string inMemoryPackageName = "memorystream://inmemory.xps";
            var packageUri = new Uri(inMemoryPackageName);
            using (var package = Package.Open(_xpsDocumentInMemoryStream))
            {
                PackageStore.AddPackage(packageUri, package);

                _xpsDocument = new XpsDocument(package, CompressionOption.Normal, inMemoryPackageName);
                _xpsDocumentPaginator = _xpsDocument.GetFixedDocumentSequence().DocumentPaginator;

                for (var docPageNumber = 0; docPageNumber < PageCount; docPageNumber++)
                {
                    yield return ProcessPage(parameters, docPageNumber);
                }

                PackageStore.RemovePackage(packageUri);

                _xpsDocument.Close();
                _xpsDocument = null;
            }
        }