在Image JavaFX上绘制用户输入 [英] Drawing user input on Image JavaFX
本文介绍了在Image JavaFX上绘制用户输入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
假设您有一个显示用户图形(某种图像)的应用程序,那么您想允许用户在此图像上绘制一些线条.关于这种情况,我有以下问题:
Suppose you have an app that displays user graphic (some kind of image) then you want to allow the user to draw some lines on this image. I have the following questions regarding such situation:
您将如何实现? 您如何从用户拖动事件中获取图像的像素坐标? 您将如何实时更新图像?
How would you accomplish that? How would you get pixel coordinates for the image from the user drag events? How would you update the image in real time?
推荐答案
我将为您提供完全相反的示例的示例[删除JavaFX上的图像] 我想作为您的出发点就足够了:
I will give you an example of the exact opposite [erasing the Image on JavaFX] which I suppose will be enough as a starter point for you:
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.image.Image;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.paint.CycleMethod;
import javafx.scene.paint.LinearGradient;
import javafx.scene.paint.Stop;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class EraseImageonCanvas extends Application {
private Pane root = new Pane();
private void setCanvas(Canvas canvas, Image img) {
GraphicsContext gc = canvas.getGraphicsContext2D();
gc.drawImage(img, 0, 0,canvas.getWidth(), canvas.getHeight());
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Erasing the Image");
Rectangle rect = new Rectangle(400, 400);
drawBackground(rect);
root.getChildren().add(rect);
final Canvas canvas = new Canvas(200, 200);
canvas.setTranslateX(100);
canvas.setTranslateY(100);
//For local images use
//image = new Image(getClass().getResource(#Path#).openStream());
final Image image = new Image(
"http://kyllo.com.br/wp-content/uploads/2013/12/Faroeste-Cabloco.jpg"
);
setCanvas(canvas,image);
final GraphicsContext gc = canvas.getGraphicsContext2D();
// Clear away portions as the user drags the mouse
canvas.addEventHandler(MouseEvent.MOUSE_DRAGGED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
gc.clearRect(e.getX() - 2, e.getY() - 2, 5, 5);
}
});
// Reset the Canvas when the user double-clicks
canvas.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent t) {
if (t.getClickCount() >1) {
setCanvas(canvas, image);
}
}
});
// Add the Canvas to the Scene, and show the Stage
root.getChildren().add(canvas);
primaryStage.setScene(new Scene(root, 400, 400));
primaryStage.show();
}
//Draws the background with a RadialGradient
private void drawBackground(Rectangle rect) {
rect.setFill(new LinearGradient(0, 0, 1, 1, true,
CycleMethod.REFLECT,
new Stop(0, Color.RED),
new Stop(1, Color.YELLOW)));
}
public static void main(String[] args) {
launch(args);
}
}
在要点
这篇关于在Image JavaFX上绘制用户输入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文