I have used the code from http://www.codeproject.com/Tips/552141/Csharp-Image-resize-convert-and-save to resize images programmatically. However, that project uses the System.Drawing
libraries, which are not available to Windows 10 applications.
I have tried using the BitmapImage
class from Windows.UI.Xaml.Media.Imaging
instead, but it does not seem to offer the functionality that was found in System.Drawing
..
Has anyone had any luck being able to resize (scale down) images in Windows 10? My application will be processing images from multiple sources, in different formats/sizes, and I am trying to resize the actual images to save space, rather than just letting the application size it to fit the Image
in which it is being displayed.
EDIT
I have modified the code from the above mentioned link, and have a hack which works for my specific need. Here it is:
public static BitmapImage ResizedImage(BitmapImage sourceImage, int maxWidth, int maxHeight)
{
var origHeight = sourceImage.PixelHeight;
var origWidth = sourceImage.PixelWidth;
var ratioX = maxWidth/(float) origWidth;
var ratioY = maxHeight/(float) origHeight;
var ratio = Math.Min(ratioX, ratioY);
var newHeight = (int) (origHeight * ratio);
var newWidth = (int) (origWidth * ratio);
sourceImage.DecodePixelWidth = newWidth;
sourceImage.DecodePixelHeight = newHeight;
return sourceImage;
}
This way seems to work, but ideally rather than modifying the original BitmapImage
, I would like to create a new/copy of it to modify and return instead.
There is no good method to directly copy a
BitmapImage
, but we can reuseStorageFile
for several times.If you just want to select a picture, show it and in the meanwhile show the re-sized picture of original one, you can pass the
StorageFile
as parameter like this:In this scenario you just need to call this task and show the re-sized image like this:
If you want to keep the
BitmapImage
parameter due to some reasons (like the sourceImage might be a modified bitmap but not directly loaded from file), and you want to re-size this new picture to another one, you will need to save the re-sized picture as a file at first, then open this file and re-size it again.