2014-09-04 119 views
6

我只想繪製正好爲15x15像素大小的圓形,並填充和輪廓。我正在使用Java2D。問題在於,由於連續地稱爲Graphics2D.fill(circle)Graphics2D.draw(circle)而繪製了16x16像素的圓圈。這是因爲內部的Java2D outlinig機制,對於給定的15x15大小提供了16x16的圓形輪廓。此外,如果我要求Java2D繪製14x14像素的圓形輪廓 - 它會繪製完整的14x14像素。我試圖玩抗鋸齒和中風提示渲染沒有運氣。
illustration這裏是:如何用Java2D繪製內部中風

  1. RenderingHints.VALUE_STROKE_NORMALIZEEllipse2D.Double(0, 0, 15, 15)輪廓
  2. RenderingHints.VALUE_STROKE_PURE和相同的輪廓 - 通知1px的失真
  3. 卒中提示和Ellipse2D.Double(0, 0, 14, 14)
  4. RenderingHints.VALUE_STROKE_NORMALIZEEllipse2D.Double(0, 0, 15, 15)大綱和抗鋸齒提示

所以,我無法繪製15px的圓形輪廓(也是13 px,29 px和任何奇數大小)與Java2D。有沒有辦法繪製某種內部筆觸,它填充形狀內邊界的像素?

+0

恕我直言,沒有辦法做到這一點在Java Grapics/Graphics2D庫,因爲我在過去面臨同樣的問題,找不到任何合理的解決方案。無論如何,選項1和4看起來不錯,如果你不想改變你的圖形庫。 – dagi12 2015-07-06 18:43:42

回答

0

看起來像「1」是你想要的選項,但你有一個錯誤的錯誤。實際上,0,0到15,15應該是16個像素。如果你想要15個像素,你需要0,0到14,14。

如果它是具有預定義顏色的15x15,則可以在某個圖像編輯程序中預先渲染並使用drawImage。

您還可以考慮翻譯.5,.5。當你做Ellipse.Double(.5,.5,15.5,15.5)時,看看#2的樣子。你可能會對這個結果感到高興。