JavaFX图形"模糊"还是反锯齿?(没有使用效果)

Rod*_*tão 6 java javafx

我正在创造一些形状来学习,一切似乎都模糊了,就像一些抗锯齿,我没有使用任何效果(我还没有得到这些课程,哈哈).

例如,我在1像素宽度的黑色背景中绘制一条白线,但它变灰了!如果我将宽度更改为2px,它会变为白色,但仍然没有真正定义.

当我"googleing"时,我发现的一切都是setSmooth(false)关于形状的方法,但它没有任何区别.在舞台或场景中我应该改变或禁用的任何东西我都不知道?

任何帮助表示赞赏.谢谢你的建议......

抱歉我的英语仍然需要改进lol ...但这不是我的自然语言.

jew*_*sea 4

请参阅形状文档:

大多数节点往往只应用整数转换,并且通常也使用整数坐标来定义它们。对于这种常见情况,具有直线边缘的形状的填充往往很清晰,因为它们与落在整数设备坐标上的像素之间的裂缝对齐,因此往往会自然地覆盖整个像素。

另一方面,抚摸这些相同的形状通常会导致轮廓模糊,因为默认描边属性指定默认描边宽度为 1.0 坐标(通常映射到恰好 1 个设备像素),并且描边应横跨形状的边框,一半落在边界两侧。由于许多常见形状中的边框往往直接落在整数坐标上,并且这些整数坐标通常精确映射到整数设备位置,因此边框往往会导致形状边框两侧的像素行和列覆盖 50%而不是其中之一 100% 覆盖。因此,填充通常可能是清晰的,但笔画通常是模糊的。

避免这些模糊轮廓的两种常见解决方案是使用更宽的笔划来完全覆盖更多像素 - 如果没有有效的缩放变换,通常使用 2.0 的笔划宽度即可实现此目的 - 或者指定 StrokeType.INSIDE 或 StrokeType.OUTSIDE 笔划样式 - 它将默认的单个单位描边偏置到形状边框内部或外部的完整像素行或列之一。

另请参阅Node的文档:

在设备像素级别,整数坐标映射到像素和像素中心之间的角和裂缝出现在整数像素位置之间的中点处。因为所有坐标值都是用浮点数指定的,所以坐标可以精确地指向这些角(当浮点值具有精确的整数值时)或像素上的任何位置。例如,坐标 (0.5, 0.5) 将指向舞台上左上像素的中心。同样,位于 (0, 0) 且尺寸为 10 x 10 的矩形将从舞台上左上角像素的左上角跨越到第 10 条扫描线上第 10 个像素的右下角。该矩形内最后一个像素的像素中心位于坐标 (9.5, 9.5) 处。

因此,当您的笔画宽度为奇数时,您可以选择以下简洁线条:

  1. 使用 StrokeType.INSIDE 或 StrokeType.OUTSIDE 描边样式。
  2. 将形状的坐标偏移 0.5 个像素,以便笔划在线条上对齐,而不是在线条之间的裂缝上对齐。
  3. 只需使用下一个偶数作为笔划宽度,例如 1 => 2、3 => 4 等。

至于为什么setSmooth(false)不起作用,我不太清楚,我的猜测是它所指的抗锯齿与笔划集中在像素之间的裂缝上时执行的抗锯齿样式无关,但我不知道为什么会这样。