Browse Source

Clamp image files (png, jpeg & jpg) PreviewImages loading for recent opened files

Xiphereal 3 years ago
parent
commit
5327516005

+ 2 - 2
PixiEditor/Models/DataHolders/RecentlyOpenedDocument.cs

@@ -89,7 +89,7 @@ namespace PixiEditor.Models.DataHolders
                     BitmapUtils.GeneratePreviewBitmap(serializableDocument.Layers, serializableDocument.Width, serializableDocument.Height, 80, 50)
                     BitmapUtils.GeneratePreviewBitmap(serializableDocument.Layers, serializableDocument.Width, serializableDocument.Height, 80, 50)
                     : null;
                     : null;
             }
             }
-            else if (FileExtension == ".png" || FileExtension == ".jpg" || FileExtension == ".jpeg")
+            else if (FileExtension is ".png" or ".jpg" or ".jpeg")
             {
             {
                 WriteableBitmap bitmap = null;
                 WriteableBitmap bitmap = null;
 
 
@@ -102,7 +102,7 @@ namespace PixiEditor.Models.DataHolders
                     corrupt = true;
                     corrupt = true;
                 }
                 }
 
 
-                return bitmap;
+                return ImageFileMaxSizeChecker.IsFileUnderMaxSize(bitmap) ? bitmap : null;
             }
             }
 
 
             return null;
             return null;

+ 15 - 0
PixiEditor/Models/IO/ImageFileMaxSizeChecker.cs

@@ -0,0 +1,15 @@
+using System.Windows.Media.Imaging;
+
+namespace PixiEditor.Models.IO
+{
+    internal static class ImageFileMaxSizeChecker
+    {
+        // Result of 2048 (Width) * 2048 (Height).
+        private const int MaxBitCountAllowed = 4194304;
+
+        public static bool IsFileUnderMaxSize(WriteableBitmap fileToCheck)
+        {
+            return fileToCheck.PixelHeight * fileToCheck.PixelWidth < MaxBitCountAllowed;
+        }
+    }
+}

+ 28 - 0
PixiEditorTests/ModelsTests/DataHoldersTests/RecentlyOpenedDocumentTests.cs

@@ -28,5 +28,33 @@ namespace PixiEditorTests.ModelsTests.DataHoldersTests
 
 
             Assert.NotNull(smallEnoughFilePreviewImage);
             Assert.NotNull(smallEnoughFilePreviewImage);
         }
         }
+
+        [Theory]
+        [InlineData("png")]
+        [InlineData("jpg")]
+        [InlineData("jpeg")]
+        public void TestThatForBigImageFilesPreviewImageIsNotLoaded(string imageFormat)
+        {
+            string bigImageFilePath = $@"{Environment.CurrentDirectory}\..\..\..\ModelsTests\IO\BigImage.{imageFormat}";
+            RecentlyOpenedDocument recentlyOpenedDocument = new RecentlyOpenedDocument(bigImageFilePath);
+
+            var bigImagePreviewImage = recentlyOpenedDocument.PreviewBitmap;
+
+            Assert.Null(bigImagePreviewImage);
+        }
+
+        [Theory]
+        [InlineData("png")]
+        [InlineData("jpg")]
+        [InlineData("jpeg")]
+        public void TestThatForSmallEnoughImageFilesPreviewImageIsLoaded(string imageFormat)
+        {
+            string smallEnoughImageFilePath = $@"{Environment.CurrentDirectory}\..\..\..\ModelsTests\IO\SmallEnoughImage.{imageFormat}";
+            RecentlyOpenedDocument recentlyOpenedDocument = new RecentlyOpenedDocument(smallEnoughImageFilePath);
+
+            var smallEnoughImagePreviewImage = recentlyOpenedDocument.PreviewBitmap;
+
+            Assert.NotNull(smallEnoughImagePreviewImage);
+        }
     }
     }
 }
 }

BIN
PixiEditorTests/ModelsTests/IO/BigImage.jpeg


BIN
PixiEditorTests/ModelsTests/IO/BigImage.jpg


BIN
PixiEditorTests/ModelsTests/IO/BigImage.png


BIN
PixiEditorTests/ModelsTests/IO/SmallEnoughImage.jpeg


BIN
PixiEditorTests/ModelsTests/IO/SmallEnoughImage.jpg


BIN
PixiEditorTests/ModelsTests/IO/SmallEnoughImage.png