首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wpf Dpi和像素完美WritableBitmap

Wpf Dpi和像素完美WritableBitmap
EN

Stack Overflow用户
提问于 2015-02-17 13:47:28
回答 1查看 2.3K关注 0票数 3

我有一个GPU渲染引擎,产生纹理。这些纹理被复制到WriteableBitmap中。此位图用作普通视图中的ImageSource。

现在,我将dpi设置为120,即在Windows控制面板中启用了125%的字体大小设置。

由于这一变化,WritableBitmap看起来真的很难看。它不再是像素完美的,而且看起来像一个糟糕的反别名(可能是因为Wpf在某种程度上扩展了它)。

我玩了以下设置:

  • This answer描述了如何从Wpf中获取Dpi,并相应地调整了WritableBitmap的dpi和宽度/高度值。
  • 在包含映像的XAML中禁用UseLayoutRounding并启用SnapToDevicePixels。

但我不能让它看起来很好。我不知道我到底要设置什么值才能得到像素的完美显示。似乎存在多个相互依赖的设置。

一个好的答案将解释哪些设置必须以组合方式设置,这样它才能按预期工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-17 16:01:03

在xaml中,将SnapsToDevicePixels设置为true。

在设置WritableBitmap、查询ActualWidth和ActualHeight的类中。然后用Dpi的比例因子乘以(1.25表示dpi 120等)。

代码语言:javascript
复制
var width = ActualWidth * _dpi_x_scale;
var height = ActualHeight * _dpi_y_scale;

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

在创建WritableBitmap时,也要使用这些缩放的宽度/高度,但要确保设置正确的dpi:

代码语言:javascript
复制
_bitmap = new WriteableBitmap(
            width,
            height,
            _dpi_x, 
            _dpi_y,
            PixelFormats.Pbgra32,
            null
            );

这解决了问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28562954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档