如何用 Java2D 绘制内部笔画
Posted
技术标签:
【中文标题】如何用 Java2D 绘制内部笔画【英文标题】:How to draw inner stroke with Java2D 【发布时间】:2014-10-28 22:50:04 【问题描述】:我只想画一个大小正好为 15x15 像素的圆圈,并有填充和轮廓。我正在使用 Java2D。问题是,由于依次调用Graphics2D.fill(circle)
和Graphics2D.draw(circle)
,绘制了 16x16 像素的圆。这是因为内部的 Java2D 轮廓机制,对于给定的 15x15 尺寸提供 16x16 的圆形轮廓。此外,如果我要求 Java2D 绘制 14x14 像素的圆形轮廓 - 它恰好绘制 14x14 像素。我尝试使用渲染器的抗锯齿和笔触提示,但没有运气。 这里是:
RenderingHints.VALUE_STROKE_NORMALIZE
和 Ellipse2D.Double(0, 0, 15, 15)
大纲
RenderingHints.VALUE_STROKE_PURE
和相同的轮廓 - 注意 1px 失真
上一个笔划提示和Ellipse2D.Double(0, 0, 14, 14)
RenderingHints.VALUE_STROKE_NORMALIZE
, Ellipse2D.Double(0, 0, 15, 15)
轮廓和抗锯齿提示
所以,我不能用 Java2D 绘制 15 像素的圆形轮廓(还有 13 像素、29 像素和任何奇数大小)。有没有办法绘制某种内部笔划,填充形状内边框的像素?
【问题讨论】:
恕我直言,在 java Grapics/Graphics2D 库中没有办法做到这一点,因为我过去面临同样的问题并且找不到任何合理的解决方案。无论如何,如果您不想更改图形库,选项 1 和 4 看起来不错。 【参考方案1】:看起来“1”是您想要的选项,但您遇到了一个错误。 0,0 到 15,15 实际上应该是 16 个像素。如果需要 15 像素,则需要 0,0 到 14,14。
如果是预定义颜色的 15x15,您可以在某些图像编辑程序中进行预渲染,然后使用 drawImage。
您也可以考虑按 0.5,.5 进行翻译。看看 #2 在你执行 Ellipse.Double(.5,.5,15.5,15.5) 时是什么样子的,你可能会对这个结果更满意。
【讨论】:
以上是关于如何用 Java2D 绘制内部笔画的主要内容,如果未能解决你的问题,请参考以下文章
如何用在浏览器中正确呈现的混合的内部和外部 HTML 内容替换内部 HTML 内容