C# Wpf Dpi和像素完美可写位图
我有一个GPU渲染引擎,可以生成纹理。这些纹理将复制到可写位图中。此位图在正常的Windows演示基础视图中用作图像源。 现在,我将dpi设置为120,也就是说,我在Windows控制面板中启用了125%字体大小设置 自从那次更改之后,可写位图看起来真的很难看。它不再是像素完美的,看起来像严重的抗锯齿(可能是因为Wpf不知何故在拉伸它) 我使用了以下设置: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并启用
- 描述如何从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
);