高分辨率监视器导致MFC中的视图文本模糊

时间:2014-03-26 00:22:10

标签: c++ visual-c++ mfc plot

我正在尝试在我的应用程序中实时绘制屏幕上的信号,该应用程序是使用MFC框架用C ++编写的。

我标记了我的图的X和Y轴,我也有沿着轴的注释。当我使用1920 * 1080p显示器时,我的情节看起来很好,因为它们是为那个尺寸设计的。我曾经用一个大小为1920 * 1080的clipBox写入一个内存DC,并且在我完成内存DC(双缓冲技术)的绘制之后,简单地将BitBlt绘制到最后。 但是现在我已经转移到2560 * 1440p显示器,我使用stretchBlt而不是BitBlt来适应新的更大的2560 * 1440p帧中相同的旧1920 * 1080 clipBox。这会导致注释和标签的文字模糊不清。

我该怎么做才能解决这个问题?可以改变字母的字体或厚度吗?

2 个答案:

答案 0 :(得分:2)

其原因可以在信号理论中找到,这实际上并非微不足道。
这是一个阅读:
http://www.number-none.com/product/Mipmapping,%20Part%201/index.html
http://www.number-none.com/product/Mipmapping,%20Part%202/index.html

所以你理解,问题来自内核,这意味着stretch算法正在使用一堆邻居,并根据经验加权计算当前目标像素的平均值。这个平均值有效地模糊了你的形象。

要解决此问题,您只能选择一次:使用完全相同的原始缓冲区(您所说的clipBox)大小,而不是使用像素完美复制。

或者,您可以在两个维度上使用完全相同的大小除以2,并在向上缩放时使用最近的过滤(非平均内核)。

答案 1 :(得分:1)

尝试使用真实字体,在内存DC中准备没有文本的位图,然后使用StretchBlt(如果必须),然后在视图的设备上下文中使用TextOut,以便针对实际的屏幕分辨率进行优化。我甚至倾向于将内存DC更改为acutlal视图/屏幕的结果以产生最佳结果。如果你真的必须提供标准尺寸的内存DC,请使用更高的结果,因为内插像素比外推效果更好。