如何使用Java2D绘制内部描边

7
我想绘制一个精确尺寸为15x15像素的圆形,并填充和描边。我正在使用Java2D。问题在于,由于顺序调用Graphics2D.fill(circle)Graphics2D.draw(circle),绘制出的圆形大小为16x16像素。这是因为内部Java2D轮廓机制对于给定的15x15大小提供了16x16圆形轮廓 。此外,如果我要求Java2D绘制14x14像素圆形轮廓 - 它会准确地绘制出14x14px的圆形。我已经尝试过使用反锯齿和渲染器的笔画提示进行操作但没有成功。
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) 轮廓和反锯齿提示
因此,我无法使用Java2D绘制15px圆形轮廓(也是13 px,29 px和任何奇数尺寸)。是否有一种方法可以绘制某种内部描边,填充形状的内边界像素?

在我看来,在Java的Grapics/Graphics2D库中没有办法实现它,因为过去我遇到了同样的问题,找不到任何合理的解决办法。不管怎样,如果你不想改变你的图形库,选项1和4看起来不错。 - dagi12
1个回答

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是什么样子的。你可能会对这个结果更满意。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接