2010-02-12 92 views
1

我已經實現了一個繪圖類,它目前只能處理整數值。我想獲得有關技術/機制的建議以處理浮動數字。使用的庫是GDI。繪製真實座標

感謝,

阿迪

+0

GDI?呃..這真的很老.. – Macke 2010-02-14 14:25:33

回答

4

在某些時候,它們需要轉換爲整數來繪製實際像素。

但是,一般來說,你做而不是只想將每個float轉換爲int,然後繪製 - 你幾乎肯定會弄得一團糟。相反,您需要/想要縮放浮點數,,然後將縮放值四捨五入爲整數。在大多數情況下,您會希望使縮放因子可變,以便用戶可以根據需要放大和縮小。

另一種可能性是讓硬件處理大部分工作 - 您可以使用OpenGL(舉一個例子)渲染你的點,把它們作爲內部浮點,讓驅動程序/硬件處理像縮放轉換爲整數。這有一個相當陡峭的成本預先(學習足夠的OpenGL,以使它做任何有用的事情),但也可以有相當可觀的回報,如快速,基於硬件的渲染,並使它相對容易處理一些事情像縮放和(如果您需要它)能夠像2D一樣容易地顯示3D點。

編輯:(主要是對評論的迴應):最終歸結爲:屏幕的分辨率低於浮點數的分辨率。例如,真正高分辨率的屏幕可能會水平顯示2048個像素 - 這是11位分辨率。即使是單精度浮點數也有大約24位的精度。不管你怎麼做,將24位分辨率降低到12位分辨率都會失去一些東西 - 通常是lot

這就是爲什麼你幾乎有讓你的比例因子可變 - 所以用戶可以選擇是否縮小,以降低分辨率看到整個圖片,或放大看到一個高分辨率的小部分。

由於提到了子像素分辨率:它確實有幫助,但只有一個。這不會解決映射到單個像素的上千種不同的項目。

+0

酷這是一個很好的答案。是的,我可以使用DirectDraw,因爲我有一些經驗,但如果我想手動縮放它,你會如何做一個值例如35.78? 如果我有一個比例係數1.2縮放,這將是35.78 * 1.2 = 42.936所以讓我們說,我將它送到43.但是,當我想刻度值35.8會發生什麼?用相同的比例因子再次提供43.解決方案如何? 感謝 – Adi 2010-02-12 19:28:10

+0

@Adi:如果你想用抗鋸齒,或WPF或類似的子像素分辨率利用OpenGL/D3D來繪製。 – Macke 2010-02-14 14:24:47

0

你必須將它們轉換爲整數,然後將它們傳遞給函數一樣MoveTo()LineTo()

2

這些float值代表什麼?我會假設他們是一些協調員。你需要知道兩件事情:

  • 源分辨率(即在這些座標繪製的DPI)
  • ,你需要的範圍,以解決

之後,這成爲一個問題,將點轉換爲合適的整數座標(根據您的屏幕分辨率)。

編輯:一個簡單的公式將是:

X(dst) = X(src) * DPI(dst)/DPI(src)

0

比例。例如,將所有積分值乘以10.將浮點值乘以10.0,然後截斷或舍入(您的選擇)。現在情節正常。

這會給你在圖形上額外的精確度。請記住看圖片時的比例因子。

否則轉換彩車繪製之前爲int。

0

你可以嘗試使用GDI +,而不是GDI,它有使用浮動座標功能。