Dzień dobry,
problem wygląda następująco:
Mam taki super prosty program do rysowania, tylko że na małych rozdzielczościach.
Tutaj chcę rysować na obrazie o rozdzielczości 84:48.
Żeby go jakoś godnie wyświetlić rysuję go na 10x większym Canvas canvas.
Problem polega na tym, że podczas rysowania, zostaje poddany jakiejś filtracji
i strasznie go rozmazuje, a ja chciałbym widzieć piksele.
Szukałem czegoś o tym, ale nic konkretnego nie znalazłem.
Mógłbym jeszcze użyć PixelReader, PixelWriter, ale to zbyt powolne (w przyszłości
chciałbym rysować na większych obrazach), a poza tym tak rozbudowana biblioteka, jak FX
powinna dać radę zrobić to, co chciałbym tu osiągnąć. W AWT taki program to pestka.
Bardzo proszę o pomoc.
//Program.java
import javafx.scene.input.MouseEvent;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.image.Image;
import javafx.scene.layout.FlowPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class Program {
private Scene scene;
private FlowPane pane;
private Canvas canvas, c;
public Program(Stage stage) {
pane = new FlowPane();
scene = new Scene(pane);
c = new Canvas(84, 48);
canvas = new Canvas(840, 480);
pane.getChildren().add(canvas);
stage.setTitle("PaintFX Test");
stage.setScene(scene);
c.getGraphicsContext2D().setFill(Color.BLACK);
canvas.addEventHandler(MouseEvent.MOUSE_DRAGGED, (e) -> {
double x = e.getX();
double y = e.getY();
c.getGraphicsContext2D().fillOval(x / 10, y / 10, 1, 1);
Image i = c.snapshot(null, null);
GraphicsContext g = canvas.getGraphicsContext2D();
g.drawImage(i, 0, 0, canvas.getWidth(), canvas.getHeight());
});
stage.show();
}
}
//PaintFX.java
import javafx.application.Application;
import javafx.stage.Stage;
public class PaintFX extends Application{
public static void main(String[] args) {
launch();
}
public void start(Stage stage) {
new Program(stage);
}
}