JavaFX图形“模糊”或抗锯齿?(未使用效果)

我正在创建一些形状,尽管没有应用效果,但所有内容似乎都变得模糊了,例如抗锯齿。

例如,在具有1像素宽度的黑色背景上绘制的白线呈现为灰色!将宽度更改为2px会导致白色,但定义不清晰。

搜索时,setSmooth(false)返回了形状的方法,但是调用它没有区别。

我应该怎么更改或停用StageScene

回答:

请参阅形状文档:

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

另一方面,抚摸那些相同的形状通常会导致轮廓模糊,因为默认的抚摸属性既指定默认笔划宽度为1.0坐标(通常恰好映射到1个设备像素),又笔划应跨越形状的边界,跌至边界的一半。由于许多常见形状的边界倾向于直接落在整数坐标上,并且那些整数坐标通常精确地映射到整数设备位置,因此边界倾向于导致形状边界两侧的像素行和像素列覆盖50%而不是一个或另一个的100%覆盖率。因此,填充通常可以是脆的,但是笔划通常是模糊的。

避免这些模糊轮廓的两种常见解决方案是使用更宽的笔划,以完全覆盖更多像素-通常,如果没有有效的比例转换,则笔划宽度为2.0即可实现此目的-

或指定StrokeType.INSIDE或StrokeType.OUTSIDE笔划样式-会将默认的单个单位笔触偏向形状边框内外的全像素行或列之一。

并参阅Node的文档:

在设备像素级别,整数坐标映射到像素的角和裂缝,并且像素的中心出现在整数像素位置之间的中点。因为所有坐标值都是用浮点数指定的,所以坐标可以精确地指向这些角(当浮点值具有精确的整数值时)或像素上的任何位置。例如,坐标(0.5,0.5)将指向舞台上左上像素的中心。同样,尺寸为10

x

10的(0,0)处的矩形将从舞台上左上像素的左上角跨到第10条扫描线上第10个像素的右下角。该矩形内最后一个像素的像素中心将位于坐标(9.5,9.5)。

因此,当笔划宽度为奇数时,可以选择干净的线条:

  1. 使用StrokeType.INSIDE或StrokeType.OUTSIDE笔触样式。
  2. 将形状的坐标偏移0.5个像素,以使笔划排列在直线上,而不是直线之间的裂缝。
  3. 只需使用下一个偶数作为笔划宽度,例如1 => 2,3 => 4,依此类推。

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

以上是 JavaFX图形“模糊”或抗锯齿?(未使用效果) 的全部内容, 来源链接: utcz.com/qa/421355.html

回到顶部