@@ -51,20 +51,33 @@ public IImage Downsize(float maxWidthOrHeight, bool disposeOriginal = false)
5151 {
5252 if ( Width > maxWidthOrHeight || Height > maxWidthOrHeight )
5353 {
54- using ( var memoryStream = new InMemoryRandomAccessStream ( ) )
54+ float factor ;
55+ if ( Width > Height )
5556 {
56- Save ( memoryStream . AsStreamForWrite ( ) ) ;
57- memoryStream . Seek ( 0 ) ;
57+ factor = maxWidthOrHeight / Width ;
58+ }
59+ else
60+ {
61+ factor = maxWidthOrHeight / Height ;
62+ }
5863
59- // ReSharper disable once AccessToDisposedClosure
60- var newBitmap = AsyncPump . Run ( async ( ) => await CanvasBitmap . LoadAsync ( _creator , memoryStream , 96 ) ) ;
61- using ( var memoryStream2 = new InMemoryRandomAccessStream ( ) )
64+ var w = factor * Width ;
65+ var h = factor * Height ;
66+ using ( var target = new CanvasRenderTarget ( _creator , w , h , 96 ) )
67+ {
68+ using ( var drawingSession = target . CreateDrawingSession ( ) )
6269 {
63- // ReSharper disable once AccessToDisposedClosure
64- AsyncPump . Run ( async ( ) => await newBitmap . SaveAsync ( memoryStream2 , CanvasBitmapFileFormat . Png ) ) ;
70+ drawingSession . DrawImage ( _bitmap , new global ::Windows . Foundation . Rect ( 0 , 0 , w , h ) ) ;
71+ }
72+
73+
74+ using ( var resizedStream = new InMemoryRandomAccessStream ( ) )
75+ {
76+ AsyncPump . Run ( async ( ) => await target . SaveAsync ( resizedStream , CanvasBitmapFileFormat . Png ) ) ;
77+ resizedStream . Seek ( 0 ) ;
78+
79+ var newImage = FromStream ( resizedStream . AsStreamForRead ( ) ) ;
6580
66- memoryStream2 . Seek ( 0 ) ;
67- var newImage = FromStream ( memoryStream2 . AsStreamForRead ( ) ) ;
6881 if ( disposeOriginal )
6982 _bitmap . Dispose ( ) ;
7083
@@ -78,7 +91,29 @@ public IImage Downsize(float maxWidthOrHeight, bool disposeOriginal = false)
7891
7992 public IImage Downsize ( float maxWidth , float maxHeight , bool disposeOriginal = false )
8093 {
81- throw new NotImplementedException ( ) ;
94+ //throw new NotImplementedException();
95+ using ( var target = new CanvasRenderTarget ( _creator , maxWidth , maxHeight , 96 ) )
96+ {
97+ using ( var drawingSession = target . CreateDrawingSession ( ) )
98+ {
99+ drawingSession . DrawImage ( _bitmap , new global ::Windows . Foundation . Rect ( 0 , 0 , maxWidth , maxHeight ) ) ;
100+ }
101+
102+
103+ using ( var resizedStream = new InMemoryRandomAccessStream ( ) )
104+ {
105+ AsyncPump . Run ( async ( ) => await target . SaveAsync ( resizedStream , CanvasBitmapFileFormat . Png ) ) ;
106+ resizedStream . Seek ( 0 ) ;
107+
108+ var newImage = FromStream ( resizedStream . AsStreamForRead ( ) ) ;
109+
110+ if ( disposeOriginal )
111+ _bitmap . Dispose ( ) ;
112+
113+ return newImage ;
114+ }
115+ }
116+
82117 }
83118
84119 public IImage Resize ( float width , float height , ResizeMode resizeMode = ResizeMode . Fit ,
0 commit comments