我将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