2012-12-11 71 views
0

有人可以向我解釋嗎?在Graphics2D中雙精度繪圖的目的是什麼

您不能在像素之間繪圖,那麼爲什麼我應該在繪圖時使用浮點或雙精度測量?在Oracle的文檔中寫了一些關於打印機設備的文檔,但它也不能在最小的點之間繪製。我不明白。

讓我們假設一條簡單的線。這條線的寬度爲1.3f。當它被繪製時,它會發生什麼:

  1. 在windows中顯示(我相信它有96 DPI)?
  2. 打印機300 DPI?

AFAIK Java在內部使用72 DPI。那麼數學如何?

+2

誰說一個單位對應一個像素? 'Graphics2D'包含一個任意的'AffineTransform'轉換,可以按照您喜歡的任何因素來縮放值。 –

+0

是的,但我也可以縮放整數值。 – Behnil

+0

是的,但像'0.1'這樣的值可以擴展到'5.0',那麼它的初始值是否在整數之間並不重要;他們現在擴大到全像素。 –

回答

0

想到幾個用例。

  • 您的圖形設備可能會被縮放。例如,我知道幾個應用程序,它們使用適當的圖形上下文縮放來繪製單位圓的窗口填充圖像,即半徑爲1的圓。
  • 您可能正在生成面向矢量的目標的輸出,如PDF文件。在這種情況下,用戶可能會隨意放大,即使在高分辨率下也可能會有相當的數量或精度。
  • 像您提到的那樣,打印機可能會以比屏幕更高的分辨率進行打印,這是通過將默認座標單位映射到設備像素大小的幾倍的內置縮放係數實現的。
  • 抗鋸齒提示子像素分辨率。施加到幾何對象的邊界處的給定像素的顏色量將取決於所述對象的子像素座標。

以上都不會排除使用單精度浮點數,事實上大多數G2D操作也可以使用浮點數。使用雙精度對於真正的大型縮放比例非常重要,在精度和類似應用方面的要求非常高。但另一方面,在任何情況下,大多數計算都是在雙精度上執行的,並且儘可能通過圖形管道承擔這些計算的開銷通常可以忽略不計。所以當你問我爲什麼要使用double而不是float時,我問你「爲什麼不?」

+0

好的,但是當我使用整數精度繪製半徑爲5的圓時,在DPI爲300的打印機上繪製它的上下文有什麼問題?它只是乘以300/72,不是嗎?所以它會是20,8333333 => 21。 – Behnil