如何在JavaFX中绘制清晰的发际线而不更改坐标

时间:2018-09-30 02:56:59

标签: javafx

如何在JavaFX中绘制清晰的不透明发际线而不更改坐标。我的形状x,y不能更改,甚至不能更改为0.1。通过将x,y修改为0.5,对我不适用。我的行x,y的值是不可控制的。当我的值固定时,我会得到一条细线。现在X和Y具有整数和小数点。5或偶数4,.3和.2在这种情况下,将同时出现细线和粗线。

我们正在使用javafx开发可扩展的图形程序。考虑到性能,我们使用javafx canvas绘制了很多矩形框。矩形框代表容器的位置。我们发现矩形将出现粗线和细线,模糊等。我们的图形需要缩放。计算出的矩形框的宽度和坐标将具有浮点数。我们无法通过使用以下帖子解决问题。缩放后,如果转换不准确,则必须不存在0.5的坐标。无论如何,谢谢您的帮助。 How to draw a crisp, opaque hairline in JavaFX 2.2? 这是我的示例。滚动鼠标后,矩形线变得模糊。

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.input.ScrollEvent;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
public class LineScaleTest extends Application {
public static void main(String[] args) { launch(args); }

@Override public void start(Stage stage) {
    AnchorPane anchorPane=new AnchorPane();
    Canvas canvas=new Canvas(500,300);
    canvas.relocate(300,300);
    GraphicsContext gc=canvas.getGraphicsContext2D();
    for(int i=0;i<10;i++){
        gc.strokeRoundRect(10.5+35*i,5.5,30,30,0,0);
    }

    for(int i=0;i<10;i++){
        gc.strokeRoundRect(10.5+35*i,65.5,30,30,0,0);
    }

    for(int i=0;i<10;i++){
        gc.strokeRoundRect(10.5+35*i,115.5,30,30,0,0);
    }

    anchorPane.setOnScroll(new EventHandler<ScrollEvent>() {
        @Override
        public void handle(ScrollEvent e) {
            if (e.getDeltaY() == 0) {
                return;
            }
            double scaleFactor = (e.getDeltaY() > 0) ? 1.1
                    : 1 / 1.1;
            anchorPane.setScaleX(anchorPane.getScaleX() * scaleFactor);
            anchorPane.setScaleY(anchorPane.getScaleY() * scaleFactor);
        }
    });
    anchorPane.getChildren().add(canvas);
    Scene scene = new Scene( anchorPane,1200, 700);
    stage.setScene(scene);
    stage.show();
}
}

0 个答案:

没有答案