Еще несколько недель назад я начал разрабатывать свое первое приложение для приложений Windows с Visual Studio 2015. Я заметил, что некоторые темы нелегко найти четкую информацию.Как изменить размер изображения с помощью C# WinRT
Я пытаюсь изменить (уменьшить) изображение, которое я сохранил ранее в файловой системе, а затем сохранил его в другой папке.
Я нашел this thread, где они говорят об этом. Я адаптировал код, который они поделили, но результат не подходит для меня. Потому что, я вижу, что результат изображения кажется «пиксельными точками», особенно по деталям изображения. Я не знаю, как записать результат изображения ... Как и при использовании старого приложения Paint Brush, когда мы меняем размер изображения.
Что я делаю неправильно? Почему так происходит?
Я подумал использовать альтернативный вариант NuGet, чтобы облегчить эту работу. В этом случае существует какой-то хороший пакет NuGet для этой задачи и он способен работать в C# Visual Studio 2015?
Я собираюсь поделиться код функции:
Примечание: новые размеры пропорциональны на исходном изображении, и я работаю с PNG изображений.
public async static Task<bool> ResizeImage(Windows.Storage.StorageFile sourceFile, Windows.Storage.StorageFile destinationFile, int newWidth, int newHeight, int dpi)
{
try
{
using (var sourceStream = await sourceFile.OpenAsync(FileAccessMode.Read))
{
Windows.Graphics.Imaging.BitmapDecoder decoder = await Windows.Graphics.Imaging.BitmapDecoder.CreateAsync(sourceStream);
Windows.Graphics.Imaging.BitmapTransform transform = new Windows.Graphics.Imaging.BitmapTransform() { ScaledHeight = Convert.ToUInt32(newHeight), ScaledWidth = Convert.ToUInt32(newWidth) };
Windows.Graphics.Imaging.PixelDataProvider pixelData = await decoder.GetPixelDataAsync(
Windows.Graphics.Imaging.BitmapPixelFormat.Rgba8,
BitmapAlphaMode.Straight,
transform,
ExifOrientationMode.RespectExifOrientation,
ColorManagementMode.DoNotColorManage);
using (var destinationStream = await destinationFile.OpenAsync(FileAccessMode.ReadWrite))
{
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, destinationStream);
encoder.SetPixelData(BitmapPixelFormat.Rgba8, BitmapAlphaMode.Premultiplied, Convert.ToUInt32(newWidth), Convert.ToUInt32(newHeight), Convert.ToUInt32(dpi), Convert.ToUInt32(dpi), pixelData.DetachPixelData());
await encoder.FlushAsync();
}
}
}
catch (Exception ex)
{
ModuleLog.WriteError(ex.ToString());
return false;
}
return true;
}
ПРИМЕЧАНИЕ: Я пытаюсь уменьшить размер изображения. Например, у меня есть исходное изображение с файлом 100 х 100 пикселей, и я хочу получить файл размером 50 х 50 пикселей.
Вы увеличиваете изображение? Если это так, то это будет выглядеть как дерьмо ... например, глядя на напечатанное изображение с увеличительным стеклом. –
Очевидно, я пытаюсь уменьшить размер изображения. – stivex
Теперь, когда вы отредактировали свой пост, это очевидно. –