[英]How to resize an image with c# WinRT
不到幾周前,我開始使用Visual Studio 2015開發我的第一個Windows應用程序Metro。我注意到有些主題不容易找到清晰的信息。
我正在嘗試調整(縮小)以前保存在文件系統上的圖像的大小,然后將其保存到另一個文件夾。
我在他們談論這個話題的地方找到了這個話題 。 我已經調整了他們共享的代碼,但是結果圖像對我來說是不可接受的。 因為,我可以看到圖像的結果似乎是“像素點”,特別是在圖像細節上。 我不知道如何描述結果圖像...當我們更改大小圖像時,就像使用舊的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 x 100像素的原始文件圖像,而我想要獲得一個50 x 50像素的文件圖像。
我認為我已經找到了解決方案。
我在函數中添加了以下行:
transform.InterpolationMode = BitmapInterpolationMode.Fant;
BitmapTransform具有InterpolationMode屬性,您可以指定在調整圖像大小時要使用的插值類型。
在這里您可以看到所有可能性。
就我而言,我注意到使用“ Fant”插值法是獲得最佳圖像效果的最佳方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.