我將Win2D高斯模糊應用於圖像文件(存儲文件)並直接應用於UIElement - Image(這是一個XAML圖像),並且我看到爲BlurAmount我正在用於存儲文件輸出和XAML圖像不同的輸出相同的值..Win 2D在直接應用於文件時產生不同的效果級別UIElement
原始圖像
當施加到XAML圖片100%模糊(輸出或者任何UIElement)
輸出時施加到存儲文件
相關代碼100%的模糊:
對於圖像文件:
using (var stream = await originalFile.OpenAsync(FileAccessMode.Read))
{
var device = new CanvasDevice();
var bitmap = await CanvasBitmap.LoadAsync(device, stream);
var renderer = new CanvasRenderTarget(device, bitmap.SizeInPixels.Width, bitmap.SizeInPixels.Height, bitmap.Dpi);
using (var ds = renderer.CreateDrawingSession())
{
var blur = new GaussianBlurEffect();
blur.BlurAmount = eo.effectAmount1;
blur.BorderMode = EffectBorderMode.Hard;
blur.Source = bitmap;
ds.DrawImage(blur);
}
var saveFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("ImageName.jpg", CreationCollisionOption.GenerateUniqueName);
using (var outStream = await saveFile.OpenAsync(FileAccessMode.ReadWrite))
{
await renderer.SaveAsync(outStream, CanvasBitmapFileFormat.Png,1.0f);
}
}
對於的UIElement(XAML圖片):
using (var stream = await sourceElement.RenderToRandomAccessStream())
{
var device = new CanvasDevice();
var bitmap = await CanvasBitmap.LoadAsync(device, stream);
var renderer = new CanvasRenderTarget(device,bitmap.SizeInPixels.Width,
bitmap.SizeInPixels.Height,
bitmap.Dpi);
using (var ds = renderer.CreateDrawingSession())
{
var blur = new GaussianBlurEffect();
blur.BlurAmount = blurAmount;
blur.Source = bitmap;
blur.BorderMode = EffectBorderMode.Hard;
ds.DrawImage(blur);
}
stream.Seek(0);
await renderer.SaveAsync(stream, CanvasBitmapFileFormat.Png);
}
問:這是預期的行爲?如果是的話,我怎樣才能使這兩個案件有相同的輸出?如果不是,我做錯了什麼?
謝謝您的回答..你建議作爲之前生產的完全一樣的輸出1日2種方法..但設置'StretchMode'到無似乎已經解決了區別..所以,只是爲了澄清,文件和xaml圖像的實際像素屬性變得不同時,圖像呈現適合一個特定的大小..? – Pratyay
我添加了一個解釋爲什麼你正在經歷像素化。 – Laith
謝謝..這是非常有益的..! – Pratyay