2013-05-29 40 views
5

Tôi không thể nhận các đường anitialiazed khi vẽ tự do trong canvas javafx. Tiếp theo là mã ...Canvas không vẽ các đường trơn mịn

import javafx.application.*; 
import javafx.event.*; 
import javafx.scene.*; 
import javafx.scene.canvas.*; 
import javafx.scene.control.*; 
import javafx.scene.input.*; 
import javafx.scene.shape.*; 
import javafx.stage.*; 

public class Test2 extends Application { 
    GraphicsContext gc; 

    public static void main(String[] args) { launch(args); } 

    private class MouseDragged implements EventHandler<MouseEvent> { 
     public void handle(MouseEvent e) { 
     gc.lineTo(e.getX(), e.getY()); 
     gc.stroke(); 
     } 
    } 

    private class MousePressed implements EventHandler<MouseEvent> { 
     public void handle(MouseEvent e) { 
     gc.moveTo(e.getX(), e.getY()); 
     } 
    } 

    @Override 
    public void start(Stage stage) { 
    Canvas canvas = new Canvas(500, 500); 
    canvas.setOnMouseDragged(new MouseDragged()); 
    canvas.setOnMousePressed(new MousePressed()); 

    gc = canvas.getGraphicsContext2D(); 
    gc.setLineCap(StrokeLineCap.ROUND); 
    gc.setLineJoin(StrokeLineJoin.ROUND); 
    gc.setLineWidth(0.1); 

    Group root = new Group(canvas); 
    Scene scene = new Scene(root); 
    stage.setTitle("Test2"); 
    stage.setScene(scene); 
    stage.show(); 
    } 
} 

Trong khi nếu tôi tạo ra một ứng dụng đu tôi có thể cung cấp render gợi ý để smoothen nó ra ...

g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 

Làm thế nào để cung cấp hits hiển thị ở đồ họa bối cảnh trong canvas?

+0

Đăng nhập yêu cầu tính năng đối với [Trình theo dõi vấn đề JavaFX] (https://javafx-jira.kenai.com) – jewelsea

+0

Liên kết theo dõi vấn đề JavaFX cũ đã chết. Các yêu cầu tính năng có thể được ghi lại dựa trên http://bugreport.java.com (tôi nghĩ), mặc dù bạn có thể có may mắn hơn khi yêu cầu tính năng được triển khai nếu bạn thảo luận trong [danh sách gửi thư openjfx-dev] (http: // mail.openjdk.java.net/mailman/listinfo/openjfx-dev) trước khi đăng nhập. – jewelsea

+0

Lưu ý rằng vấn đề thực tế ở đây có thể được vẽ trên cùng một điểm nhiều lần, điều này làm cho các đường chống răng cưa xuất hiện bí danh. Xem câu hỏi liên quan: [Cách áp dụng phương pháp chống răng cưa cho các phương thức javafx như GraphicsContext.fillArc()?] (Https://stackoverflow.com/questions/34148521/how-to-apply-antialiasing-to-javafx-methods-like-graphicscontext -fillarc) – jewelsea

Trả lời

3

Hãy thử thêm hiệu ứng này để GraphicsContext của bạn:

BoxBlur blur = new BoxBlur(); 
blur.setWidth(1); 
blur.setHeight(1); 
blur.setIterations(1); 
gc.setEffect(blur); 

Vì vậy, (như là một ví dụ) phương pháp start của bạn bây giờ sẽ trông như thế này:

@Override 
    public void start(Stage stage) { 
    Canvas canvas = new Canvas(500, 500); 
    canvas.setOnMouseDragged(new MouseDragged()); 
    canvas.setOnMousePressed(new MousePressed()); 

    gc = canvas.getGraphicsContext2D(); 
    gc.setLineCap(StrokeLineCap.ROUND); 
    gc.setLineJoin(StrokeLineJoin.ROUND); 
    gc.setLineWidth(1); 

    BoxBlur blur = new BoxBlur(); 
    blur.setWidth(1); 
    blur.setHeight(1); 
    blur.setIterations(1); 
    gc.setEffect(blur); 

    Group root = new Group(canvas); 
    Scene scene = new Scene(root); 
    stage.setTitle("Test2"); 
    stage.setScene(scene); 
    stage.show(); 
    } 

Đó không phải là chính xác hoàn hảo ... nhưng điều tốt nhất tôi đã tìm thấy cho đến nay.

+0

Thay thế tuyệt vời. Nhưng với mục đích này, tôi nghĩ rằng tôi sẽ gắn bó với swing trong một thời gian. Có vài điều mà tôi không thể làm mà không có sự linh hoạt của bufferedimage. – Bhupen

Các vấn đề liên quan