Forráskód Böngészése

fix: image scaling may cause a rare bug that terminates an entire application when under a high memory pressure

MarcinZiabek 2 éve
szülő
commit
a79e1463c0
1 módosított fájl, 11 hozzáadás és 6 törlés
  1. 11 6
      Source/QuestPDF/Helpers/Helpers.cs

+ 11 - 6
Source/QuestPDF/Helpers/Helpers.cs

@@ -87,6 +87,15 @@ namespace QuestPDF.Helpers
             };
         }
         
+        internal static SKImage ScaleImage(this SKImage image, ImageSize targetResolution)
+        {
+            var imageInfo = new SKImageInfo(targetResolution.Width, targetResolution.Height, image.Info.ColorType, image.Info.AlphaType, image.Info.ColorSpace);
+            
+            using var bitmap = SKBitmap.FromImage(image);
+            using var resultBitmap = bitmap.Resize(imageInfo, SKFilterQuality.Medium);
+            return SKImage.FromBitmap(resultBitmap);
+        }
+        
         internal static SKImage CompressImage(this SKImage image, ImageCompressionQuality compressionQuality)
         {
             var targetFormat = image.Info.IsOpaque 
@@ -105,12 +114,8 @@ namespace QuestPDF.Helpers
             if (image.Width == targetResolution.Width && image.Height == targetResolution.Height)
                 return CompressImage(image, compressionQuality);
             
-            var imageInfo = new SKImageInfo(targetResolution.Width, targetResolution.Height, image.Info.ColorType, image.Info.AlphaType, image.Info.ColorSpace);
-            
-            using var resultImage = SKImage.Create(imageInfo);
-            image.ScalePixels(resultImage.PeekPixels(), SKFilterQuality.Medium);
-            
-            return CompressImage(resultImage, compressionQuality);
+            using var scaledImage = image.ScaleImage(targetResolution);
+            return CompressImage(scaledImage, compressionQuality);
         }
 
         internal static SKImage GetImageWithSmallerSize(SKImage one, SKImage second)