Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class FXMLDocumentController implements Initializable {
- @FXML
- private Pane pane;
- @FXML
- private ImageView imageView;
- private LineChart<Integer, Double> lineChart;
- private ObservableList<XYChart.Series<Integer, Double>> series;
- private Image image;
- @FXML
- private BorderPane borderPane;
- @FXML
- private FlowPane flowPane;
- private final Axis xAxis = new NumberAxis(0, 255, 64);
- private final Axis yAxis = new NumberAxis(0, 100, 10);
- @FXML
- private StackPane leftPane;
- @Override
- public void initialize(URL url, ResourceBundle rb) {
- lineChart = new LineChart(xAxis, yAxis);
- borderPane.widthProperty().addListener(listener -> resize());
- borderPane.heightProperty().addListener(listener -> resize());
- }
- @FXML
- private void loadImageBtn(ActionEvent event) {
- FileChooser fc = new FileChooser();
- fc.getExtensionFilters().addAll(new FileChooser.ExtensionFilter("JPG", "*.jpg"),
- new FileChooser.ExtensionFilter("BMP", "*.bmp"));
- File file = fc.showOpenDialog(IPOG_Zkouska_Histogram.stage);
- if (Objects.nonNull(file)) {
- image = new Image(file.toURI().toString());
- if (image != null && !image.isError()) {
- imageView.setImage(image);
- resize();
- obnovHistogram();
- } else {
- Alert alert = new Alert(AlertType.ERROR);
- alert.setContentText("ERROR image");
- alert.setHeaderText(null);
- alert.setTitle("ERROR");
- alert.showAndWait();
- }
- } else {
- Alert alert = new Alert(AlertType.ERROR);
- alert.setContentText("ERROR file");
- alert.setHeaderText(null);
- alert.setTitle("ERROR");
- alert.showAndWait();
- }
- }
- private void resize() {
- double height = borderPane.getHeight()-flowPane.getPrefHeight();
- lineChart.setPrefHeight(height);
- if (image != null) {
- double pomW = leftPane.getWidth()/image.getWidth();
- double pomH = leftPane.getHeight()/image.getHeight();
- double pomF = pomW < pomH ? pomW : pomH;
- imageView.setFitHeight(pomF*image.getHeight());
- imageView.setFitWidth(pomF*image.getWidth());
- }
- }
- private void obnovHistogram() {
- if (series != null) {
- series.clear();
- }
- lineChart = new LineChart(xAxis, yAxis);
- lineChart.setCreateSymbols(false);
- series = lineChart.getData();
- lineChart.setPrefWidth(300);
- lineChart.setPrefHeight(pane.getHeight());
- double red[] = new double[256];
- double green[] = new double[256];
- double blue[] = new double[256];
- Arrays.fill(red, 0);
- Arrays.fill(green, 0);
- Arrays.fill(blue, 0);
- XYChart.Series<Integer, Double> seriesRed = new XYChart.Series<>();
- XYChart.Series<Integer, Double> seriesGreen = new XYChart.Series<>();
- XYChart.Series<Integer, Double> seriesBlue = new XYChart.Series<>();
- ObservableList<XYChart.Data<Integer, Double>> dataRed = seriesRed.getData();
- ObservableList<XYChart.Data<Integer, Double>> dataGreen = seriesGreen.getData();
- ObservableList<XYChart.Data<Integer, Double>> dataBlue = seriesBlue.getData();
- PixelReader pr = image.getPixelReader();
- for (int i = 0; i < image.getWidth(); i++) {
- for (int j = 0; j < image.getHeight(); j++) {
- Color color = pr.getColor(i, j);
- red[to255(color.getRed())]++;
- green[to255(color.getGreen())]++;
- blue[to255(color.getBlue())]++;
- }
- }
- double maxR = 0;
- double maxG = 0;
- double maxB = 0;
- for (int i = 0; i < red.length; i++) {
- maxR = Math.max(maxR, red[i]);
- maxG = Math.max(maxG, green[i]);
- maxB = Math.max(maxB, blue[i]);
- }
- for (int i = 0; i < red.length; i++) {
- dataRed.add(new XYChart.Data<>(i,(red[i]/maxR)*100));
- dataGreen.add(new XYChart.Data<>(i,(green[i]/maxG)*100));
- dataBlue.add(new XYChart.Data<>(i,(blue[i]/maxB)*100));
- }
- series.addAll(seriesRed, seriesBlue, seriesGreen);
- pane.getChildren().add(lineChart);
- }
- private int to255(double i) {
- return (int)(i*255);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement