2013-05-29 10 views
5

Nie potrafię uzyskać linii anitialiazed podczas rysowania odręcznego na płótnie javafx. Poniżej znajduje się kod ...Płaszczyzna nie rysuje wygładzonymi liniami

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(); 
    } 
} 

Chociaż jeśli tworzę aplikację huśtawka mogę zapewnić renderowania podpowiedzi do wygładzają ją ...

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

Jak mogę zapewnić rendering trafienia do grafiki kontekst w płótnie?

+0

Zapisz żądanie funkcji w [module śledzenia problemów JavaFX] (https://javafx-jira.kenai.com) – jewelsea

+0

Stare łącze do śledzenia problemów JavaFX nie działa. Żądania funkcji można rejestrować pod adresem http://bugreport.java.com (jak sądzę), chociaż prawdopodobnie miałbyś więcej szczęścia w uzyskaniu żądania funkcji zaimplementowanego, jeśli dyskutowałeś na [liście mailingowej openjfx-dev] (http: // mail.openjdk.java.net/mailman/listinfo/openjfx-dev) przed zalogowaniem. – jewelsea

+0

Należy zauważyć, że faktycznym problemem może być wielokrotne rysowanie tych samych punktów, co powoduje, że linie wygładzane są aliasingowane. Zobacz pokrewne pytanie: [Jak zastosować antyaliasing do metod javafx takich jak GraphicsContext.fillArc()?] (Https://stackoverflow.com/questions/34148521/how-to-apply-antialiasing-to-javafx-methods-like-graphicscontext -fillarc) – jewelsea

Odpowiedz

3

Spróbuj dodać ten efekt do GraphicsContext:

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

Więc (jako przykład) metoda start będzie teraz wyglądać tak:

@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(); 
    } 

Nie jest to idealne ... ale najlepsze, co do tej pory znalazłem.

+0

Ładna alternatywa. Ale w tym celu myślę, że przez jakiś czas będę się trzymał z huśtawką. Jest kilka rzeczy, których nie mogę zrobić bez elastyczności zbuforowanego obrazu. – Bhupen

Powiązane problemy