c# – WinRT:如何确保在Canvas上以像素完美的方式绘制图像?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – WinRT:如何确保在Canvas上以像素完美的方式绘制图像?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1882字,纯文字阅读大概需要3分钟。
内容图文
我在Windows运行时环境中将Image实例添加到Canvas,并且在140和180刻度分辨率显示时,我的图像不断放大,它在刻度分辨率100中看起来很完美.我尝试创建3个PNG图像,每个刻度尺寸一个:100 ,140,180但它仍然可以扩展它们,它们看起来很模糊.我在青色背景上创建了一个带有4个黑色像素的测试图像,我从模拟器中截取了一个截图,看看图像是如何模糊的,我的原始图像只有4个完美的黑色像素:
我尝试更改我的Image对象的拉伸模式,但它什么也没做.我正在使用此代码在运行时添加图像:
var bitmapImage = new BitmapImage();
StorageFile bitmapFile = await StorageFile.GetFileFromApplicationUriAsync(imageUri);
await bitmapImage.SetSourceAsync(await bitmapFile.OpenReadAsync());
Image image = new Image{ Source = bitmapImage};
image.SetValue(Canvas.LeftProperty, x);
image.SetValue(Canvas.TopProperty, y);
canvas.Children.Add(image);
如何让图像在画布中完美地绘制像素,而不进行缩放和我想要的精确x / y坐标?
解决方法:
我想我有一个解决方法,但它需要两个步骤:
首先,我必须使用更加标准的方式加载图像,而不涉及获取文件路径.
var bitmapImage = new BitmapImage(imageUri);
不知何故,这必须在内部保留更多信息,该图像来自具有当前显示的相应ResolutionScale的文件.因此,当它被画布绘制时,它根本不会缩放.然而,这只能解决问题的一半.
下一个问题是用于指定图像绘制位置的x,y坐标正在缩放,因此图像绘制在错误的位置,比我想要的更远.我唯一想做的就是首先将它们放大,如下所示:
var resScale = DisplayInformation.GetForCurrentView().ResolutionScale;
Image image = new Image{ Source = bitmapImage};
image.SetValue(Canvas.LeftProperty, (x * 100.0) / (int)resScale);
image.SetValue(Canvas.TopProperty, (y * 100.0) / (int)resScale);
canvas.Children.Add(image);
整个事情看起来有点疯狂,但它似乎到目前为止工作……任何人都有更好的解决方案或解释为什么这一切都是必要的?看起来像Canvas类需要一个不缩放的模式,不会弄乱不同分辨率显示器上的图像或坐标.
更新:这不能很好地工作,使用double来存储值会导致精度损失,有时会出现抗锯齿伪像.如果你想要像素完美的图形,这是不可接受的.我仍然在寻找一个完美的解决方案.
内容总结
以上是互联网集市为您收集整理的c# – WinRT:如何确保在Canvas上以像素完美的方式绘制图像?全部内容,希望文章能够帮你解决c# – WinRT:如何确保在Canvas上以像素完美的方式绘制图像?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。