如何用 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_NORMALIZEEllipse2D.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 内容

如何用子类内部状态包装所有 python 超类方法?

如何用 Flask 反向代理服务器内部不同端口的监控页面/数据

如何用Signaltap ii观察器件内部信号

如何用python画冰墩墩?

如何用jq获取一个div内部所有input[type='text']的值