在 JavaFX 中绘制子像素?

Drawing subpixels in JavaFX?

对于我尝试创建的 JavaFX 图形程序,我希望能够将每个像素分成 4 个子像素并绘制它们。这在 JavaFX(或任何其他 Java 图形库)中是否可行?

当使用 FontSmoothingType.LCD 时,JavaFX 将渲染文本的子像素。

据我所知,在 JavaFX 中没有任何机制可以指定使用 sub pixel rendering 用于文本以外的任何其他图形基元(例如直线和圆圈)。

即使您不能为其他图元指定渲染类型,它们也可能会或可能不会使用子像素渲染进行渲染(我不知道,尽管我猜即使是子像素渲染也不会被使用当使用 anti-aliasing 渲染图元时)。

是的,你可以。默认情况下,如果您在 canvas 上绘制一个整数像素,它将绘制一个点 "between" 实际屏幕像素,即它将与相邻像素抗锯齿。如果你偏移 0.5,那么它将精确地绘制在像素上。因此,您可以使用 0.5 到 1.5 之间的值绘制子像素。例如,如果您使用 Y1=100.5 和 Y2=101.5 绘制一条水平线,您将在两者之间看到抗锯齿效果。您还可以将线宽设置为非整数,在这种情况下,它会使像素变暗或抗锯齿适当的量。我不确定 FontSmoothing,但这是 canvas GraphicsContext 的一部分。