Javafx 如何禁用画布像素平滑
我在画布节点中绘制了一些像素,如下所示:Javafx 如何禁用画布像素平滑,javafx,javafx-8,Javafx,Javafx 8,我在画布节点中绘制了一些像素,如下所示: canvas.getGraphicsContext2D().getPixelWriter().setColor(10, 10, Color.RED); 然后我缩放画布。现在像素模糊/平滑(请参见第一幅图像)。但我想要实现的是第二幅图 我该怎么做 在javafx中呈现图像的一些方法,实际上javafx中的许多组件都是抗锯齿的,这意味着它们将尝试平滑,请参阅另一篇文章,其中介绍了图像 您可以尝试先将像素绘制到图像视图,然后禁用“平滑”属性并将图像重新绘制
canvas.getGraphicsContext2D().getPixelWriter().setColor(10, 10, Color.RED);
然后我缩放画布。现在像素模糊/平滑(请参见第一幅图像)。但我想要实现的是第二幅图
我该怎么做
在javafx中呈现图像的一些方法,实际上javafx中的许多组件都是抗锯齿的,这意味着它们将尝试平滑,请参阅另一篇文章,其中介绍了图像 您可以尝试先将像素绘制到图像视图,然后禁用“平滑”属性并将图像重新绘制回上下文:
ImageView scaledImageView = new ImageView(image);
scaledImageView.setSmooth(false);
然而,这需要重新实现你已经拥有的,
并以调整后的大小将图像绘制回context2d
这篇文章也有同样的问题,因为消除混叠会造成模糊,仅供参考
也有一些侵入性较小的解决方案可以发挥作用,有时,如果缩放/缩放幅度小于2(例如32x32、64x64),消除混叠会扭曲图像,这是因为:
在设备像素级,整数坐标映射到角上
像素和像素中心之间的裂缝出现在
整数像素位置之间的中点。因为所有的坐标
值是用浮点数指定的,坐标可以
精确地指向这些角点(当浮点值
精确整数值)或像素上的任何位置。例如,一个
坐标(0.5,0.5)将指向左上角的中心
舞台上的像素。类似地,在(0,0)处的矩形具有尺寸
10乘10的范围将从左上角开始
舞台上第10个像素右下角的像素
第10扫描线。其中最后一个像素的像素中心
矩形将位于坐标(9.5,9.5)处
在javafx中呈现图像的一些方法,实际上javafx中的许多组件都是抗锯齿的,这意味着它们将尝试平滑,请参阅另一篇用图像覆盖它的文章 您可以尝试先将像素绘制到图像视图,然后禁用“平滑”属性并将图像重新绘制回上下文:
ImageView scaledImageView = new ImageView(image);
scaledImageView.setSmooth(false);
然而,这需要重新实现你已经拥有的,
并以调整后的大小将图像绘制回context2d
这篇文章也有同样的问题,因为消除混叠会造成模糊,仅供参考
也有一些侵入性较小的解决方案可以发挥作用,有时,如果缩放/缩放幅度小于2(例如32x32、64x64),消除混叠会扭曲图像,这是因为:
在设备像素级,整数坐标映射到角上
像素和像素中心之间的裂缝出现在
整数像素位置之间的中点。因为所有的坐标
值是用浮点数指定的,坐标可以
精确地指向这些角点(当浮点值
精确整数值)或像素上的任何位置。例如,一个
坐标(0.5,0.5)将指向左上角的中心
舞台上的像素。类似地,在(0,0)处的矩形具有尺寸
10乘10的范围将从左上角开始
舞台上第10个像素右下角的像素
第10扫描线。其中最后一个像素的像素中心
矩形将位于坐标(9.5,9.5)处
我浏览了
GraphicsContext2D
和Canvas
API,搜索了互联网和SE,但没有找到任何有用的东西。最后,我决定创建一个最大尺寸的画布,然后使用canvas.setScaleX(a)
和canvas.setScaleY(a)
其中0我查看了GraphicsContext2D
和canvas
API,搜索了互联网和SE,但找不到任何有用的东西。最后,我决定创建一个最大尺寸的画布,然后使用canvas.setScaleX(a)
和canvas.setScaleY(a)
where0