From 1b0af799bbb22aed98493ae8e652f86256eb4fbf Mon Sep 17 00:00:00 2001 From: Benedikt Stebner Date: Fri, 3 Nov 2023 07:20:39 +0100 Subject: [PATCH] [Win32] Fix LoadIcon (#13466) * [Win32] Fix LoadIcon * Add check for seekable stream --- src/Windows/Avalonia.Win32/Win32Platform.cs | 31 +++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/Windows/Avalonia.Win32/Win32Platform.cs b/src/Windows/Avalonia.Win32/Win32Platform.cs index b7a685a853..eb8f75e6f9 100644 --- a/src/Windows/Avalonia.Win32/Win32Platform.cs +++ b/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()