如何使用Java2D绘制内部笔划

时间:2014-09-04 08:56:19

标签: java graphics awt java-2d

我只想绘制尺寸正好为15x15像素的圆圈,并且有填充和轮廓。我使用的是Java2D。问题是,由于后续调用了Graphics2D.fill(circle)Graphics2D.draw(circle),所以绘制了16x16像素的圆圈。这是因为内部的Java2D outlinig机制,它对于给定的15x15大小提供了16x16的圆形轮廓。此外,如果我要求Java2D绘制14x14像素的圆形轮廓 - 它精确地绘制14x14像素。我试图使用抗锯齿和渲染器的笔触提示而没有运气。
illustration以下是:

  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)大纲和抗锯齿提示
  5. 因此,我无法使用Java2D绘制15px圆形轮廓(也是13 px,29 px和任何奇数)。有没有办法绘制某种内部笔划,它填充形状内边缘的像素?

1 个答案:

答案 0 :(得分: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是什么样子你可能会对这个结果更满意。