Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 禁用WPF图像上的抗锯齿_C#_.net_Wpf_User Interface_Antialiasing - Fatal编程技术网

C# 禁用WPF图像上的抗锯齿

C# 禁用WPF图像上的抗锯齿,c#,.net,wpf,user-interface,antialiasing,C#,.net,Wpf,User Interface,Antialiasing,我正在编写一个小的登录对话框,出于美观的原因,我在对话框顶部嵌入了一个横幅。一切都进行得很顺利,只是默认情况下,WPF会消除整个图像的别名,使其中包含的文本变得模糊 经过一点搜索,前几页的结果表明,人们普遍认为WPF中不能禁用抗锯齿。有人能证实或否认这一点吗 这对我来说是一个小问题——我会把图片中的文字去掉,然后在背景图片上叠加一个带有相同文字的标签,以达到同样的效果(尽管我必须承认,这有点烦人) 谢谢, Rob据我所知,WPF在缩放位图时总是进行抗锯齿处理。但是,您应该能够通过避免位图缩放来实

我正在编写一个小的登录对话框,出于美观的原因,我在对话框顶部嵌入了一个横幅。一切都进行得很顺利,只是默认情况下,WPF会消除整个图像的别名,使其中包含的文本变得模糊

经过一点搜索,前几页的结果表明,人们普遍认为WPF中不能禁用抗锯齿。有人能证实或否认这一点吗

这对我来说是一个小问题——我会把图片中的文字去掉,然后在背景图片上叠加一个带有相同文字的标签,以达到同样的效果(尽管我必须承认,这有点烦人)

谢谢,
Rob

据我所知,WPF在缩放位图时总是进行抗锯齿处理。但是,您应该能够通过避免位图缩放来实现您的目标

有两个步骤:

  • 在图像上设置
    SnapsToDevicePixels=“true”
  • 在图像上设置ScaleTransform以缩放图像,使一个设备像素=一个位图像素
  • 要计算所需的ScaleTransform,请按如下方式计算屏幕的DPI:

    var DPI = Win32Functions.GetSystemMetrics(SM_CYICON) / SystemParameters.IconHeight * 96;
    
    然后对于位图,执行以下操作:

    var scale = bitmapDPI / DPI;
    var transform = new ScaleTransform(scale, scale);
    
    这将使位图的像素与设备像素完全匹配。WPF不会拉伸位图,因此不应存在抗锯齿


    如果您确实希望在高DPI屏幕上拉伸图像,但不进行抗锯齿处理(例如,将所有像素加倍),只需在您自己的代码中使用您喜欢的算法拉伸位图,并将上述算法用于拉伸的位图。

    这不是真正的抗锯齿-是亚像素定位导致了问题,我已经在我的博客上写了关于它(以及关于解决问题的控件)的文章:


    避免子像素化的另一种(自动)方法:请注意,如果修改了Windows DPI设置(例如使用125%或150%字体大小),则可能会出现完全相同的问题。这也将导致位图被放大,使事情看起来“有趣”(或者更确切地说,丑陋…)。我们可以添加一个关于这个问题的单独问题,因为答案/解决方案非常相同。谢谢Ray-这个评论实际上今天帮了我很多忙!我使用InteropBitmap作为图像源,它总是被缩放到看起来非常难看(尽管位图DPI为96,这与显示DPI不同)。添加一个ScaleTransform来“缩小”有帮助,现在看起来应该这样。赏金马上就要到了,但由于太多限制,我不得不等23个小时才能给你。:)按承诺给予的赏金。:)同时我也对你的答案做了一些改进。