Parcourir la source

[Win32] Fix LoadIcon (#13466)

* [Win32] Fix LoadIcon

* Add check for seekable stream
Benedikt Stebner il y a 2 ans
Parent
commit
1b0af799bb
1 fichiers modifiés avec 26 ajouts et 5 suppressions
  1. 26 5
      src/Windows/Avalonia.Win32/Win32Platform.cs

+ 26 - 5
src/Windows/Avalonia.Win32/Win32Platform.cs

@@ -239,18 +239,39 @@ namespace Avalonia.Win32
             using (var memoryStream = new MemoryStream())
             {
                 bitmap.Save(memoryStream);
+
                 var iconData = memoryStream.ToArray();
+
                 return new IconImpl(new Win32Icon(iconData), iconData);
             }
         }
 
         private static IconImpl CreateIconImpl(Stream stream)
         {
-            var ms = new MemoryStream();
-            stream.CopyTo(ms);
-            ms.Position = 0;
-            var iconData = ms.ToArray();
-            return new IconImpl(new Win32Icon(iconData), iconData);
+            if (stream.CanSeek)
+            {
+                stream.Position = 0;
+            }
+
+            if (stream is MemoryStream memoryStream)
+            {
+                var iconData = memoryStream.ToArray();
+
+                return new IconImpl(new Win32Icon(iconData), iconData);
+            }
+            else
+            {
+                using (var ms = new MemoryStream())
+                {
+                    stream.CopyTo(ms);
+
+                    ms.Position = 0;
+
+                    var iconData = ms.ToArray();
+
+                    return new IconImpl(new Win32Icon(iconData), iconData);
+                }
+            }
         }
 
         private static void SetDpiAwareness()