Skip to content

Commit 4a7ad8d

Browse files
Implementation for Downsize
1 parent ef22fa8 commit 4a7ad8d

File tree

1 file changed

+46
-11
lines changed

1 file changed

+46
-11
lines changed

src/Graphics/src/Graphics/Platforms/Windows/PlatformImage.cs

Lines changed: 46 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)