public static IEnumerable<Bitmap> ToBitmap(string filename, Parameters parameters) { using (var xpsConverter = new Xps2Image(filename)) { return xpsConverter.ToBitmap(parameters).ToList(); } }
public static IEnumerable<Bitmap> ToBitmap(Stream stream, Parameters parameters) { using (var xpsConverter = new Xps2Image(stream)) { return xpsConverter.ToBitmap(parameters).ToList(); } }
public static IEnumerable<Bitmap> ToBitmap(byte[] byteArray, Parameters parameters) { using (var xpsConverter = new Xps2Image(byteArray)) { return xpsConverter.ToBitmap(parameters).ToList(); } }
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); } }
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); } }
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; }
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>(); }
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>(); }
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>(); }
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; } }