当前位置: 首页 > 面试题库 >

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

相威
2023-03-14
问题内容

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

例如,在具有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)不起作用,我不确定,我猜是它指的抗锯齿与笔划集中在像素之间的裂缝中心时执行的抗锯齿样式无关,但是我不知道为什么会这样。



 类似资料:
  • 在学习渲染的旅途中,你可能会时不时遇到模型边缘有锯齿的情况。这些锯齿边缘(Jagged Edges)的产生和光栅器将顶点数据转化为片段的方式有关。在下面的例子中,你可以看到,我们只是绘制了一个简单的立方体,你就能注意到它存在锯齿边缘了: 可能不是非常明显,但如果你离近仔细观察立方体的边缘,你就应该能够看到锯齿状的图案。如果放大的话,你会看到下面的图案: 这很明显不是我们想要在最终程序中所实现的效果

  • 我继承了一个模拟程序来扩展新功能。原文是使用AWT图形库编写的小程序。在添加新功能之前,我想使程序适应桌面并使用JavaFX而不是AWT。 模拟每秒绘制数百或数千个对象数十次,然后擦除它们并在新位置重新绘制它们,从而有效地对它们进行动画处理。我正在为UI的该部分使用Canvas对象。擦除是通过用背景色重新绘制对象来完成的。然而,我所看到的是擦除对象是不完整的。不过,一种“光环”被抛在了脑后。 下面

  • 目前我正在使用JavaFX开发一个2D游戏,游戏是像素艺术。不幸的是,像素艺术是模糊的,这是由抗锯齿引起的。 有没有办法在JavaFX画布上禁用抗锯齿?我试过用SceneAntialiasing。残废了,没用。我找不到其他方法来关闭它。

  • 我在我的项目中使用了InkCanvas,我注意到每当我画东西时,笔划都非常尖锐,一旦我松开鼠标按钮,它就会变得模糊。 有没有什么方法可以使笔划与绘制时的样子保持一致? 现在,我正在检查从图像中获得的阵列,并删除任何与颜色不完全匹配的像素。红色(即ARGB:255255,0,0)。。。我相信有一种更聪明的方法可以做到这一点! 提前谢谢。

  • 问题内容: 我们如何在CSS中应用类似于Photoshop的字体抗锯齿功能,例如清晰,锐利,强壮,平滑? 所有浏览器都支持这些吗? 问题答案: 主席先生,你在这里:-) 1个 2

  • 问题内容: 对于PIL中的线条和椭圆,图像是粗糙的。 我发现仅在调整大小和缩略图中使用了抗锯齿功能。 绘制直线或椭圆形时,有什么方法可以进行抗锯齿吗? 问题答案: 本地执行此操作的唯一方法是使用超级采样。以所需大小的倍数渲染图像,然后使用进行渲染。