Browse Source

Greatly simplified Image API

MarcinZiabek 2 years ago
parent
commit
de63e22d74

+ 0 - 41
Source/QuestPDF.UnitTests/ImageTests.cs

@@ -118,47 +118,6 @@ namespace QuestPDF.UnitTests
 
 
             (highDpiSize / (float)lowDpiSize).Should().BeGreaterThan(40);
             (highDpiSize / (float)lowDpiSize).Should().BeGreaterThan(40);
         }
         }
-
-        [Test]
-        public void InternalImageIsDisposedAfterDocumentGeneration()
-        {
-            var image = QuestPDF.Infrastructure.Image.FromBinaryData(Placeholders.Image(100, 100));
-            image.IsDisposed.Should().BeFalse();
-            
-            GeneratePdf();
-            GC.Collect();
-            GC.WaitForPendingFinalizers();
-            
-            image.IsDisposed.Should().BeTrue();
-
-            byte[] GeneratePdf()
-            {
-                // move Document object to separate closure to ensure it has no active references in the hierarchy
-                return Document.Create(x => x.Page(page => page.Content().Image(image))).GeneratePdf();
-            }
-        }
-        
-        [Test]
-        public void SharedImageIsDisposedAfterDocumentGeneration()
-        {
-            var image = QuestPDF.Infrastructure.SharedImage.FromBinaryData(Placeholders.Image(100, 100));
-            image.IsDisposed.Should().BeFalse();
-            
-            GeneratePdf();
-            GC.Collect();
-            Thread.Sleep(0);
-            
-            image.IsDisposed.Should().BeFalse();
-            
-            image.Dispose();
-            image.IsDisposed.Should().BeTrue();
-
-            byte[] GeneratePdf()
-            {
-                // move Document object to separate closure to ensure it has no active references in the hierarchy
-                return Document.Create(x => x.Page(page => page.Content().Image(image))).GeneratePdf();
-            }
-        }
         
         
         private static int GetDocumentSize(Action<IContainer> container)
         private static int GetDocumentSize(Action<IContainer> container)
         {
         {

+ 0 - 6
Source/QuestPDF/Elements/Image.cs

@@ -12,12 +12,6 @@ namespace QuestPDF.Elements
         internal bool UseOriginalImage { get; set; }
         internal bool UseOriginalImage { get; set; }
         internal int? TargetDpi { get; set; }
         internal int? TargetDpi { get; set; }
         internal ImageCompressionQuality? CompressionQuality { get; set; }
         internal ImageCompressionQuality? CompressionQuality { get; set; }
-
-        ~Image()
-        {
-            if (DocumentImage is { IsDocumentScoped: true })
-                DocumentImage?.Dispose();
-        }
         
         
         internal override SpacePlan Measure(Size availableSpace)
         internal override SpacePlan Measure(Size availableSpace)
         {
         {

+ 9 - 58
Source/QuestPDF/Infrastructure/Image.cs

@@ -1,5 +1,6 @@
 using System;
 using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
+using System.Diagnostics;
 using System.IO;
 using System.IO;
 using QuestPDF.Drawing.Exceptions;
 using QuestPDF.Drawing.Exceptions;
 using QuestPDF.Helpers;
 using QuestPDF.Helpers;
@@ -17,31 +18,23 @@ namespace QuestPDF.Infrastructure
     {
     {
         internal SKImage SkImage { get; }
         internal SKImage SkImage { get; }
         internal ImageSize Size { get; }
         internal ImageSize Size { get; }
-        internal bool IsDocumentScoped { get; }
-        internal bool IsDisposed { get; private set; }
-        
-        internal LinkedList<(GetImageVersionRequest request, SKImage image)> ScaledImageCache { get; } = new();
 
 
-        internal Image(SKImage image, bool isDocumentScoped)
+        internal LinkedList<(GetImageVersionRequest request, SKImage image)> ScaledImageCache { get; } = new();
+ 
+        internal Image(SKImage image)
         {
         {
             SkImage = image;
             SkImage = image;
-            IsDocumentScoped = isDocumentScoped;
             Size = new ImageSize(image.Width, image.Height);
             Size = new ImageSize(image.Width, image.Height);
         }
         }
         
         
-        internal void Dispose()
+        ~Image()
         {
         {
-            if (IsDisposed)
-                return;
-            
             SkImage.Dispose();
             SkImage.Dispose();
-
+            
             foreach (var cacheKey in ScaledImageCache)
             foreach (var cacheKey in ScaledImageCache)
                 cacheKey.image.Dispose();
                 cacheKey.image.Dispose();
-
-            IsDisposed = true;
-        } 
-
+        }
+        
         #region Scaling Image
         #region Scaling Image
 
 
         internal SKImage GetVersionOfSize(GetImageVersionRequest request)
         internal SKImage GetVersionOfSize(GetImageVersionRequest request)
@@ -86,49 +79,7 @@ namespace QuestPDF.Infrastructure
             if (image == null)
             if (image == null)
                 throw new DocumentComposeException("Cannot load or decode provided image.");
                 throw new DocumentComposeException("Cannot load or decode provided image.");
 
 
-            return new Image(image, true);
-        }
-
-        #endregion
-    }
-
-    public class SharedImage : Image, IDisposable
-    {
-        internal SharedImage(SKImage image) : base(image, false)
-        {
-            
-        }
-        
-        public void Dispose()
-        {
-            base.Dispose();
-        } 
-        
-        #region public constructors
-        
-        public static new SharedImage FromBinaryData(byte[] imageData)
-        {
-            return CreateImage(SKImage.FromEncodedData(imageData));
-        }
-
-        public static new SharedImage FromFile(string filePath)
-        {
-            return CreateImage(SKImage.FromEncodedData(filePath));
-        }
-
-        public static new SharedImage FromStream(Stream fileStream)
-        {
-            return CreateImage(SKImage.FromEncodedData(fileStream));
-        }
-
-        private static SharedImage CreateImage(SKImage? image)
-        {
-            if (image == null)
-                throw new DocumentComposeException("Cannot load or decode provided image.");
-
-            var result = new SharedImage(image);
-            
-            return result;
+            return new Image(image);
         }
         }
 
 
         #endregion
         #endregion