Как выбрать определенную область изображения с помощью события мыши в веб-просмотре и показать белый экран, нажав кнопку «Некоторые» - PullRequest
1 голос
/ 26 сентября 2019

Я должен выбрать определенный фрагмент изображения, который находится в WebView, и обрезать изображение и сохранить обрезанное изображение в другое место, а также сохранить основное изображение, и я также хочу повернуть изображение на определенный угол в Интернетевид изображения.

Я попробовал этот код, чтобы дать ниже.

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.sun.javafx.application.PlatformImpl;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker;
import javafx.concurrent.Worker.State;
import javafx.geometry.Orientation;
import javafx.scene.Scene;
import javafx.scene.control.SplitPane;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.scene.shape.Rectangle;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class MediaMonitoring extends Application {

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

private static WebView mainWebView;
private static WebEngine webEngine;
private static WebView imageWebView;
private static WebView detailWebView;
private static Scene mainScene;
private static Scene scene;

@Override
public void start(Stage primaryStage) throws Exception {
    PlatformImpl.startup(() -> {
        mainWebView = new WebView();
        SplitPane mainSplitPane = new SplitPane();
        SplitPane imageSplitPane = new SplitPane();
        SplitPane detailSplitPane = new SplitPane();
        detailSplitPane.setOrientation(Orientation.VERTICAL);
        imageSplitPane.getItems().add(0, mainWebView);
        scene = new Scene(imageSplitPane);
        webEngine = mainWebView.getEngine();
        webEngine.setJavaScriptEnabled(true);
        imageWebView = new WebView();
        detailWebView = new WebView();
        mainScene = new Scene(mainSplitPane);
        imageWebView.addEventFilter(KeyEvent.KEY_RELEASED, (KeyEvent e) -> {
            if (e.getCode() == KeyCode.ADD || e.getCode() == KeyCode.EQUALS || e.getCode() == KeyCode.PLUS) {
                imageWebView.setZoom(imageWebView.getZoom() * 1.1);
            } else if (e.getCode() == KeyCode.SUBTRACT || e.getCode() == KeyCode.MINUS) {
                imageWebView.setZoom(imageWebView.getZoom() / 1.1);
            }
        });

        Rectangle rectangle = new Rectangle(0, 0, 0, 0);
        rectangle.setVisible(true);

        imageWebView.addEventFilter(MouseEvent.ANY, (MouseEvent mouseEvent) -> {
                System.out.println(mouseEvent.getEventType() + "CLicking    >>>>>>>>>>>>");
                if (mouseEvent.getEventType() == MouseEvent.MOUSE_CLICKED) {
                    rectangle.setVisible(true);
                    rectangle.setTranslateX(mouseEvent.getX());
                    rectangle.setTranslateY(mouseEvent.getY());
                }
                if (mouseEvent.getEventType() == MouseEvent.MOUSE_MOVED && rectangle.isVisible()) {
                    rectangle.setWidth(mouseEvent.getX() - rectangle.getTranslateX());
                    rectangle.setHeight(mouseEvent.getY() - rectangle.getTranslateY());
                }

                if (mouseEvent.getEventType() == MouseEvent.MOUSE_RELEASED)
                    rectangle.setVisible(true);

            /*
             * Pane pane = new Pane(imageWebView, rectangle); final Scene scene1 = new
             * Scene(pane, 400, 300);
             * 
             * 
             * if (!imageSplitPane.getItems().isEmpty())
             * imageSplitPane.getItems().remove(0);
             * 
             * 
             * imageSplitPane.getItems().add(0,scene1.getFocusOwner());
             */
            //primaryStage.setScene(scene1);
            //primaryStage.show();

                //mainScene
                System.err.printf("X: %.2f, Y: %.2f, Width: %.2f, Height: %.2f%n", rectangle.getX(), rectangle.getY(),
                        rectangle.getWidth(), rectangle.getHeight());
        });

        webEngine.getLoadWorker().stateProperty()
                .addListener((ObservableValue<? extends State> observable, State oldValue, State newValue) -> {
                    primaryStage.setTitle(webEngine.getLocation());
                    if (newValue == Worker.State.SUCCEEDED
                            && mainWebView.getEngine().getLoadWorker().getState() == Worker.State.SUCCEEDED) {
                        storeDetail(webEngine);
                    }
                    if (newValue == Worker.State.SCHEDULED) {
                        Platform.runLater(() -> showMainScreen(webEngine.getLocation(), imageSplitPane,
                                mainSplitPane, detailSplitPane, mainScene, primaryStage));
                    }
                });

        webEngine.load("http://pmmstest.ankiti.net/");
        primaryStage.setScene(scene);
    });
    primaryStage.show();
}

static void showMainScreen(String location, SplitPane imageSplitPane, SplitPane mainSplitPane,
        SplitPane detailSplitPane, Scene mainScene, Stage primaryStage) {
    if (location.contains("img")) {
        webEngine.getLoadWorker().cancel();
        if (location.matches("(.*)img=(.*)")) {
            int n = location.indexOf("img=");
            int len = location.length();
            String imageUrl = "file:" + location.substring(n + 4, len).split("&")[0];
            imageWebView.getEngine().load(imageUrl);
            if (location.matches("(.*)target=wb2(.*)")) {
                int n1 = location.indexOf("target=wb2");
                String detailUrl = "" + location.substring(0, n1 + 10);
                detailWebView.getEngine().load(detailUrl);
            }
            if (!imageSplitPane.getItems().isEmpty())
                imageSplitPane.getItems().remove(0);
            if (mainSplitPane.getItems().size() >= 2)
                mainSplitPane.getItems().remove(0, 2);
            if (detailSplitPane.getItems().size() >= 2)
                detailSplitPane.getItems().remove(0, 2);
            imageSplitPane.getItems().add(0, imageWebView);
            imageWebView.setZoom(1.5);
            detailSplitPane.getItems().add(0, mainWebView);
            detailSplitPane.getItems().add(1, detailWebView);
            mainSplitPane.getItems().add(0, imageSplitPane);
            mainSplitPane.getItems().add(1, detailSplitPane);
            primaryStage.setScene(mainScene);
        }
    }
}

static void storeDetail(WebEngine webEngine) {
    if (webEngine.getLocation().contains("noob=1&noshell=1&ini=")) {
        int n4 = webEngine.getLocation().indexOf("ini=");
        int n5 = webEngine.getLocation().indexOf("&output_format=html");
        String find4 = webEngine.getLocation().substring(n4 + 4, n5);
        String html = (String) webEngine.executeScript("document.documentElement.innerText");

        try {
            System.out.write(html.getBytes(StandardCharsets.UTF_8));
        } catch (IOException ex) {
            Logger.getLogger(SwingFXWebView.class.getName()).log(Level.SEVERE, null, ex);
        }

        String html1 = html.replace('|', '\n');
        String h1 = html1.replaceAll("\n", "\r\n");
        String path = "C:/temp";
        path = path + "/";
        File newFile = new File(path + find4 + ".ini");

        try {
            newFile.createNewFile();
            if (newFile.exists()) {
                newFile.delete();
            }
            try (FileWriter writer = new FileWriter(newFile, true)) {
                writer.write(h1);
                writer.flush();
            } catch (IOException ex) {
                Logger.getLogger(SwingFXWebView.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (IOException ex) {
            Logger.getLogger(SwingFXWebView.class.getName()).log(Level.SEVERE, null, ex);
        }

        if (html.contains("date_data_path=")) {
            storeDateData(html);
        }
    }
}

static void storeDateData(String html) {
    int n6 = html.indexOf("date_data_path=");
    int len1 = html.length();
    String find2 = html.substring(n6 + 15, len1 - 1);
    String pathname = "C:";
    String cuts = "cuts";
    pathname += find2 + "/" + cuts;
    File directory = new File(pathname);
    if (!directory.exists()) {
        directory.mkdirs();
    }
    String pathname1 = "C:";
    String db = "db";
    pathname1 += find2 + "/" + db;
    File directory1 = new File(pathname1);
    if (!directory1.exists()) {
        directory1.mkdirs();
    }
    String pathname2 = "C:";
    String ocr = "ocr";
    pathname2 += find2 + "/" + ocr;
    File directory2 = new File(pathname2);
    if (!directory2.exists()) {
        directory2.mkdirs();
    }
    String pathname3 = "C:";
    String output = "output";
    pathname3 += find2 + "/" + output;
    File directory3 = new File(pathname3);
    if (!directory3.exists()) {
        directory3.mkdirs();
    }
    String pathname4 = "C:";
    String scans = "scans";
    pathname4 += find2 + "/" + scans;
    File directory4 = new File(pathname4);
    if (!directory4.exists()) {
        directory4.mkdirs();
    }
}
}

Используя этот код, я получаю координату мыши, но я не могу нарисовать прямоугольник на изображении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...