我有一个GPU渲染引擎,可以生成纹理。这些纹理被复制到WriteableBitmap中。此位图在常规Windows Presentation Foundation视图中用作ImageSource。
现在,我将dpi设置为120,也就是说,我在Windows控制面板中启用了125%的字体大小设置。
自那次改变以来,WritableBitmap看起来真的很难看。它不再是像素完美的,看起来像是非常抗锯齿(可能是因为Wpf以某种方式拉伸它)。
我玩了以下设置:
但我不能让它看起来很好。我不确定我是否理解为了获得像素完美显示我必须设置哪些值。似乎有多个设置相互依赖。
一个好的答案将解释如何组合设置哪些设置以使其按预期工作。
答案 0 :(得分:1)
在xaml 中,将SnapsToDevicePixels设置为true。
在设置WritableBitmap 的类中,查询ActualWidth和ActualHeight。然后乘以Dpi的比例因子(dpi 120的1.25等)。
var width = ActualWidth * _dpi_x_scale;
var height = ActualHeight * _dpi_y_scale;
我使用这些宽度和高度值来设置Gpu上渲染纹理的大小。
创建WritableBitmap时,还要使用那些缩放的宽度/高度,但一定要设置正确的dpi:
_bitmap = new WriteableBitmap(
width,
height,
_dpi_x,
_dpi_y,
PixelFormats.Pbgra32,
null
);
这解决了这个问题。