[英]Wpf Dpi and pixel-perfect WritableBitmap
我有一个产生纹理的GPU渲染引擎。 这些纹理被复制到WriteableBitmap中。 此位图在常规Windows Presentation Foundation视图中用作ImageSource。
现在,我将dpi设置为120,即在Windows控制面板中启用了125%字体大小设置。
自从更改以来,WritableBitmap看起来真的很丑。 它不再是完美的像素,并且看起来抗锯齿性很差(可能是因为Wpf以某种方式对其进行了拉伸)。
我玩了以下设置:
但是我无法让它看起来很好。 我不确定我是否确切知道必须设置哪些值才能获得像素完美的显示。 似乎有多个相互依赖的设置。
一个好的答案将解释如何必须组合设置哪些设置才能使其按预期工作。
在xaml中 ,将SnapsToDevicePixels设置为true。
在设置WritableBitmap的类中 ,查询ActualWidth和ActualHeight。 然后将其与Dpi的比例因子相乘(对于dpi 120,为1.25)。
var width = ActualWidth * _dpi_x_scale;
var height = ActualHeight * _dpi_y_scale;
我使用这些width和height值来设置Gpu上渲染纹理的大小。
创建WritableBitmap时,还请使用那些缩放的宽度/高度,但请确保设置正确的dpi:
_bitmap = new WriteableBitmap(
width,
height,
_dpi_x,
_dpi_y,
PixelFormats.Pbgra32,
null
);
这样就解决了问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.