2014-03-26 32 views
0

我想在我的應用程序中實時繪製屏幕上的信號,該應用程序使用MFC框架以C++編寫。高分辨率顯示器導致查看文本在MFC中模糊

我標記了我的地塊的X軸和Y軸,也有沿軸的註釋。當我使用1920 * 1080p顯示器時,我的情節看起來很好,因爲它們是爲這種尺寸設計的。我曾經寫過一個內存直流,大小爲1920 * 1080的clipBox,在完成內存直流(雙緩衝技術)繪圖後,最終完成繪圖工作。 但現在我已經移動到2560 * 1440p顯示器,我使用stretchBlt而不是BitBlt來適應新的更大的2560 * 1440p相同的舊的1920 * 1080 clipBox。這導致我的註釋和標籤文本變得模糊。

我能做些什麼來解決這個問題?可以更改字母或字母厚度有幫助嗎?

+2

創建一個位圖的大小,你的畫布,只是做bitblts。如果你試圖「拉伸」你的圖形,你總會得到模糊的線條/文字(很難在1.5像素範圍內縮放像素) – franji1

回答

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

嘗試使用真正的字體,在內存DC和StretchBlt中準備沒有文本的位圖(如果必須),然後在視圖的設備上下文中使用TextOut,以便可以針對實際屏幕分辨率進行優化。我甚至會傾向於將內存DC改爲acutlal視圖/屏幕的解析以產生最佳結果。如果你真的必須提供標準尺寸的內存DC,請使用更高的解析度,因爲內插像素比外插更好。