From 476a9800c08887119555c53b9a11a2f36c1c1bc4 Mon Sep 17 00:00:00 2001 From: Benedikt Schroeder Date: Fri, 21 Sep 2018 15:04:18 +0200 Subject: [PATCH 1/2] Inital --- .../Media/Imaging/WicBitmapImpl.cs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs b/src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs index b16ea45fc6..d9fb00fa5b 100644 --- a/src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs +++ b/src/Windows/Avalonia.Direct2D1/Media/Imaging/WicBitmapImpl.cs @@ -15,6 +15,8 @@ namespace Avalonia.Direct2D1.Media /// public class WicBitmapImpl : BitmapImpl { + private BitmapDecoder _decoder; + /// /// Initializes a new instance of the class. /// @@ -33,10 +35,10 @@ namespace Avalonia.Direct2D1.Media /// The stream to read the bitmap from. public WicBitmapImpl(Stream stream) { - using (BitmapDecoder decoder = new BitmapDecoder(Direct2D1Platform.ImagingFactory, stream, DecodeOptions.CacheOnLoad)) - { - WicImpl = new Bitmap(Direct2D1Platform.ImagingFactory, decoder.GetFrame(0), BitmapCreateCacheOption.CacheOnLoad); - } + // https://stackoverflow.com/questions/48982749/decoding-image-from-stream-using-wic/48982889#48982889 + _decoder = new BitmapDecoder(Direct2D1Platform.ImagingFactory, stream, DecodeOptions.CacheOnLoad); + + WicImpl = new Bitmap(Direct2D1Platform.ImagingFactory, _decoder.GetFrame(0), BitmapCreateCacheOption.CacheOnLoad); } /// @@ -72,7 +74,7 @@ namespace Avalonia.Direct2D1.Media UnmanagedMethods.CopyMemory( (l.Data.DataPointer + row * l.Stride), (data + row * stride), - (UIntPtr) l.Data.Pitch); + (UIntPtr)l.Data.Pitch); } } } @@ -92,6 +94,7 @@ namespace Avalonia.Direct2D1.Media public override void Dispose() { WicImpl.Dispose(); + _decoder?.Dispose(); } /// From c5419a3c265ba6dc2c7f9222d2cc57b3549c2d33 Mon Sep 17 00:00:00 2001 From: ahopper Date: Mon, 24 Sep 2018 10:12:11 +0100 Subject: [PATCH 2/2] create only one identity matrix --- src/Avalonia.Visuals/Matrix.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Avalonia.Visuals/Matrix.cs b/src/Avalonia.Visuals/Matrix.cs index 287ad1b3a2..cdaaa2b4b4 100644 --- a/src/Avalonia.Visuals/Matrix.cs +++ b/src/Avalonia.Visuals/Matrix.cs @@ -47,7 +47,7 @@ namespace Avalonia /// /// Returns the multiplicative identity matrix. /// - public static Matrix Identity => new Matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0); + public static Matrix Identity { get; } = new Matrix(1.0, 0.0, 0.0, 1.0, 0.0, 0.0); /// /// Returns whether the matrix is the identity matrix.