我有一个小型UWP应用程序,它以两种方式加载相同的图像:
var folder = Package.Current.InstalledLocation;
var file = await folder.GetFileAsync("TestImage.png");
var bitmapImage1 = new BitmapImage();
using (var stream = await file.OpenAsync(FileAccessMode.Read))
{
await bitmapImage1.SetSourceAsync(stream);
}
var bitmapImage2 = new BitmapImage(new Uri(BaseUri, "TestImage.png"));
_image.Source = bitmapImage1;
//_image.Source = bitmapImage2;
问题是图像控制以不同的方式显示相同的图像。对于bitmapImage1图像没有平滑,但对于bitmapImage2,它没关系。 How it looks like。我需要在show之前对图像进行一些操作(更改一些像素),但之后我还需要使用平滑的图像。你能帮帮我吗?
我还使用WriteableBitmap来改变一些像素并且具有相同的结果(没有平滑)。看起来我需要告诉Image控件如何绘制它。
以下是link to project了解更多信息
答案 0 :(得分:0)
我测试了你的代码。如果您没有为图像控件设置Height
和Width
属性,您会发现图片看起来都是一样的。因此,一个看起来平滑但另一个看起来不是图像控制缩放图片的原因。没有缩放图片看起来不会有所不同。我想这可能会导致矢量和位图图像之间存在差异。
你应该能够通过创建一个平滑的图片来解决它,你想要在应用程序中显示它的大小,并将图像控件设置为与图片相同的大小,或者不设置Height
和{ {1}}属性,这可能会解决。
我的结果:
答案 1 :(得分:0)
我已经在另一个线程上获得了解决方案。 如果改变代码行的顺序,它会有所帮助:
var folder = Package.Current.InstalledLocation;
var file = await folder.GetFileAsync("TestImage.png");
var bitmapImage1 = new BitmapImage();
_image.Source = bitmapImage1;
using (var stream = await file.OpenAsync(FileAccessMode.Read))
{
await bitmapImage1.SetSourceAsync(stream);
}
因此我们应该分配Image源,而不是将源流设置为Bitmap。
看来,图像控制非常灵活地解码图像,因此它可以适合实际的UI大小。如果首先将BitmapImage设置为Image.Source,那么将像第二个一样正确地平滑图片。