Exemple #1
0
        public void VisualToImage(object visual, BookUIPoint pixelSize, ImageFormat format, string path)
        {
            if (!(visual is Visual target))
            {
                throw new ArgumentException(visual.GetType().FullName + "is not Visual!" + Environment.NewLine + "In " + nameof(IExportToImageService));
            }

            RenderTargetBitmap rtb = new RenderTargetBitmap((int)pixelSize.X, (int)pixelSize.Y, 96d, 96d, PixelFormats.Default);
            DrawingVisual      dv  = new DrawingVisual();

            using (DrawingContext dc = dv.RenderOpen())
            {
                VisualBrush vb = new VisualBrush(target);
                dc.DrawRectangle(vb, null, new Rect(new Point(), new Point(pixelSize.X, pixelSize.Y)));
            }
            rtb.Render(dv);


            BitmapEncoder bitmapEncoder = GetEncoderFromFormat(format);

            bitmapEncoder.Frames.Add(BitmapFrame.Create(rtb));

            using (var fs = File.OpenWrite(path))
            {
                bitmapEncoder.Save(fs);
            }
        }
Exemple #2
0
        private void ExportBookToImage(Book book, ImageFormat format, string path)
        {
            // Generate new folder
            string folderPath = Path.Combine(Path.GetDirectoryName(path), Path.GetFileNameWithoutExtension(path));

            Directory.CreateDirectory(folderPath);

            BookUIPoint imageSize = new BookUIPoint(book.PaperSize.GetWidth() * 10, book.PaperSize.GetHeight() * 10);

            List <BookPage> pages = new List <BookPage>(book.BookPages);

            pages.Insert(0, book.FrontCover);
            pages.Add(book.BackCover);

            for (int i = 0, l = pages.Count; i < l; i++)
            {
                BookPage page = pages[i];

                string imagePath = Path.Combine(folderPath, i + Path.GetExtension(path));
                VisualToImage(page.ToCanvas(book.PaperSize), imageSize, format, imagePath);
            }
        }