Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.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 Dpi和像素完美可写位图_C#_Wpf_Dpi_Pixel Perfect - Fatal编程技术网

C# Wpf Dpi和像素完美可写位图

C# Wpf Dpi和像素完美可写位图,c#,wpf,dpi,pixel-perfect,C#,Wpf,Dpi,Pixel Perfect,我有一个GPU渲染引擎,可以生成纹理。这些纹理将复制到可写位图中。此位图在正常的Windows演示基础视图中用作图像源。 现在,我将dpi设置为120,也就是说,我在Windows控制面板中启用了125%字体大小设置 自从那次更改之后,可写位图看起来真的很难看。它不再是像素完美的,看起来像严重的抗锯齿(可能是因为Wpf不知何故在拉伸它) 我使用了以下设置: 描述如何从Wpf获取Dpi,我相应地调整了可写位图Dpi和宽度/高度值 在包含图像的XAML中禁用UseLayoutRounding并启用

我有一个GPU渲染引擎,可以生成纹理。这些纹理将复制到可写位图中。此位图在正常的Windows演示基础视图中用作图像源。 现在,我将dpi设置为120,也就是说,我在Windows控制面板中启用了125%字体大小设置

自从那次更改之后,可写位图看起来真的很难看。它不再是像素完美的,看起来像严重的抗锯齿(可能是因为Wpf不知何故在拉伸它)

我使用了以下设置:

  • 描述如何从Wpf获取Dpi,我相应地调整了可写位图Dpi和宽度/高度值
  • 在包含图像的XAML中禁用UseLayoutRounding并启用SnapToDevicePixels
但我不能让它看起来好看。我不确定我是否理解为了获得像素完美的显示,我必须设置哪些值。似乎存在多个相互依赖的设置


一个好的答案将解释如何组合设置哪些设置以使其按预期工作。

在xaml中,将SnapsToDevicePixels设置为true

在设置可写位图的类中,查询实际宽度和实际高度。然后将其与Dpi的比例因子相乘(DPI120的比例因子为1.25,等等)

我使用这些宽度和高度值来设置Gpu上渲染纹理的大小

创建可写位图时,也使用缩放的宽度/高度,但确保设置正确的dpi:

_bitmap = new WriteableBitmap(
            width,
            height,
            _dpi_x, 
            _dpi_y,
            PixelFormats.Pbgra32,
            null
            );

这就解决了问题。

听一次总比听十次好。这篇文章的最后一段有帮助吗?你看过这篇文章了吗?但是如何获得dpi呢?
_bitmap = new WriteableBitmap(
            width,
            height,
            _dpi_x, 
            _dpi_y,
            PixelFormats.Pbgra32,
            null
            );