Jelajahi Sumber

wpf: Tweaks to ImageUtils pdf conversion

Kenric Nugteren 2 bulan lalu
induk
melakukan
24cda2b60a

+ 5 - 5
InABox.Core/DigitalForms/Layouts/Values/DFLayoutEmbeddedMediaValues.cs

@@ -133,27 +133,27 @@ namespace InABox.Core
 
         object IList.this[int index] { get => ((IList)_values)[index]; set => ((IList)_values)[index] = value; }
 
-        public int Add(object value)
+        int IList.Add(object value)
         {
             return ((IList)_values).Add(value);
         }
 
-        public bool Contains(object value)
+        bool IList.Contains(object value)
         {
             return ((IList)_values).Contains(value);
         }
 
-        public int IndexOf(object value)
+        int IList.IndexOf(object value)
         {
             return ((IList)_values).IndexOf(value);
         }
 
-        public void Insert(int index, object value)
+        void IList.Insert(int index, object value)
         {
             ((IList)_values).Insert(index, value);
         }
 
-        public void Remove(object value)
+        void IList.Remove(object value)
         {
             ((IList)_values).Remove(value);
         }

+ 39 - 25
inabox.wpf/ImageUtils.cs

@@ -904,39 +904,53 @@ namespace InABox.WPF
                 }
             }
         }
+
+        public static byte[][] GetPDFThumbnails(byte[] pdfData, int width, int height)
+        {
+            using var inData = new MemoryStream(pdfData);
+            using var converter = new PdfToImageConverter(inData);
+            return converter.Convert(0, converter.PageCount - 1, new SizeF(width, height), true, false, false)
+                .ToArray(x =>
+                {
+                    using var outData = new MemoryStream();
+                    x.Position = 0;
+                    x.CopyTo(outData);
+                    return outData.ToArray();
+                });
+        }
         
         public static byte[] PDFToBitmap(byte[] pdfData, int page)
         {
-            using (var inData = new MemoryStream(pdfData))
-            {
-                using (var converter = new PdfToImageConverter(inData))
-                {
-                    using (var outData = new MemoryStream())
-                    {
-                        var stream = converter.Convert(page, false, false);
-                        stream.Position = 0;
-                        stream.CopyTo(outData);
-                        return outData.ToArray();
-                    }
-                }
-            }
-            
+            using var inData = new MemoryStream(pdfData);
+            using var converter = new PdfToImageConverter(inData);
+            using var outData = new MemoryStream();
+            var stream = converter.Convert(page, false, false);
+            stream.Position = 0;
+            stream.CopyTo(outData);
+            return outData.ToArray();
         }
         
-        public static Bitmap[] PDFToBitmapArray(byte[] pdfData)
+        public static byte[][] PDFToByteArrays(byte[] pdfData)
         {
-            Bitmap[] images = [];
-            using (var ms = new MemoryStream(pdfData))
-            {
-                using (var converter = new PdfToImageConverter(ms))
+            using var ms = new MemoryStream(pdfData);
+            using var converter = new PdfToImageConverter(ms);
+            return converter.Convert(0, converter.PageCount - 1, false, false)
+                .ToArray(x =>
                 {
-                    images = converter.Convert(0, converter.PageCount - 1, false, false)
-                        .Select(x => new Bitmap(x))
-                        .ToArray();
-                }
-            }
+                    using var outData = new MemoryStream();
+                    x.Position = 0;
+                    x.CopyTo(outData);
+                    return outData.ToArray();
+                });
 
-            return images;
+        }
+        
+        public static Bitmap[] PDFToBitmapArray(byte[] pdfData)
+        {
+            using var ms = new MemoryStream(pdfData);
+            using var converter = new PdfToImageConverter(ms);
+            return converter.Convert(0, converter.PageCount - 1, false, false)
+                .ToArray(x => new Bitmap(x));
         }
 
         [System.Runtime.InteropServices.DllImport("gdi32.dll")]