From 35378ef3fe991b87b46b9a1b3d0a2651a83d4c86 Mon Sep 17 00:00:00 2001 From: Alexander Kimmig Date: Thu, 26 Oct 2023 21:30:06 +0200 Subject: [PATCH] v1.0.1 --- README.TXT | 9 ++++++++- RGB.java | 7 +++++++ Window.java | 48 ++++++++++++++++++++++++++++++++++-------------- 3 files changed, 49 insertions(+), 15 deletions(-) diff --git a/README.TXT b/README.TXT index 6478414..2a754b7 100644 --- a/README.TXT +++ b/README.TXT @@ -4,9 +4,16 @@ PROJEKTZWECK: Liest ein Bild aus einer JPG-Datei ein und stellt die Anschließend werden zufallsverteilte Punkte den Originaldaten angenähert um abschließend das Bild auf diese Farben reduziert wieder abzuspeichern. -VERSION oder DATUM: 1.0 (20.10.2023) +VERSION oder DATUM: 1.0.1 (26.10.2023) WIE IST DAS PROJEKT ZU STARTEN: Instanz der Klasse Window anlegen AUTOR: Alexander Kimmig (a.kimmig@dhg-rw.de) BENUTZERHINWEISE: Die ChartDirector_s.jar muss in den BlueJ-Einstellungen als externe Benutzerbibliothek eingebunden werden. (Quelle: https://www.advsofteng.com/doc/cdjava.htm) + +CHANGELOG: +* Version 1.0.1 (26.10.2023) + * Möglichkeit, das Fenster in kleinerer Auflösung anzuzeigen + * Möglichkeit, die Punktwolke farbig anzuzeigen + -> Achtung: sehr langsam, nur mit kleinem Bild möglich! +* Version 1.0 (20.10.2023) \ No newline at end of file diff --git a/RGB.java b/RGB.java index a1b2e5d..0497e46 100644 --- a/RGB.java +++ b/RGB.java @@ -110,6 +110,13 @@ public class RGB return (this.r << 16) + (this.g << 8) + (this.b); } + /** + * Ausgabe als int mit alpha-Kanal + */ + public int toInt(int alpha) { + return (alpha << 24) + (this.r << 16) + (this.g << 8) + (this.b); + } + /** * Setze zufällige Koordinaten */ diff --git a/Window.java b/Window.java index 7d137c3..8655e47 100644 --- a/Window.java +++ b/Window.java @@ -10,7 +10,7 @@ import java.util.Collections; * Zeigt das Fenster an mit allen Komponenten * * @author Alexander Kimmig - * @version 1.0 + * @version 1.0.1 */ public class Window implements ActionListener { @@ -24,6 +24,9 @@ public class Window implements ActionListener private int alpha = 25; private int beta = 45; + private int size; + private boolean colorize; + private JButton vl; private JButton vr; private JButton vu; @@ -42,8 +45,11 @@ public class Window implements ActionListener /** * Konstruktor: legt JFrame und alle Panels/Buttons an */ - public Window() + public Window(int size, boolean colorize) { + this.size = size; + this.colorize = colorize; + frame = new JFrame(); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } @@ -53,7 +59,7 @@ public class Window implements ActionListener mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS)); drawPanel = new JPanel(); - drawPanel.setPreferredSize(new Dimension(1000, 1000)); + drawPanel.setPreferredSize(new Dimension(size, size)); drawPanel.setBackground(new Color(0xFFFFFF)); JPanel view = new JPanel(); JPanel steps = new JPanel(); @@ -130,8 +136,8 @@ public class Window implements ActionListener ChartViewer viewer = new ChartViewer(); // Einstellungen setzen - ThreeDScatterChart c = new ThreeDScatterChart(1000, 1000); - c.setPlotRegion(500, 480, 600, 600, 450); + ThreeDScatterChart c = new ThreeDScatterChart(this.size, this.size); + c.setPlotRegion((int)(this.size / 2), (int)(this.size * 0.48), (int)(this.size * 0.6), (int)(this.size * 0.6), (int)(this.size * 0.45)); c.xAxis().setTitle("R", "Arial Bold", 10); c.yAxis().setTitle("G", "Arial Bold", 10); c.zAxis().setTitle("B", "Arial Bold", 10); @@ -140,17 +146,31 @@ public class Window implements ActionListener c.zAxis().setDateScale(0, 255); c.setViewAngle(alpha, beta); + double[] x, y, z; // Bildpunkte - double[] x = new double[image.size()]; - double[] y = new double[image.size()]; - double[] z = new double[image.size()]; - for (int i = 0; i < image.size(); i++) { - x[i] = image.get(i).r; - y[i] = image.get(i).g; - z[i] = image.get(i).b; + if (colorize) { + x = new double[1]; + y = new double[1]; + z = new double[1]; + for (RGB p : image) { + x[0] = p.r; + y[0] = p.g; + z[0] = p.b; + // Koordinaten Form Größe Farbe ARGB Rahmen ARGB + c.addScatterGroup(x,y,z, "", Chart.CircleShape, 5, p.toInt(224), 0xFF000000); + } + } else { + x = new double[image.size()]; + y = new double[image.size()]; + z = new double[image.size()]; + for (int i = 0; i < image.size(); i++) { + x[i] = image.get(i).r; + y[i] = image.get(i).g; + z[i] = image.get(i).b; + } + // Koordinaten Form Größe Farbe ARGB Rahmen ARGB + c.addScatterGroup(x,y,z, "", Chart.CircleShape, 5, 0xE0FF0000, 0xFF000000); } - // Koordinaten Form Größe Farbe ARGB Rahmen ARGB - c.addScatterGroup(x,y,z, "", Chart.CircleShape, 5, 0xE0FF0000, 0xFF000000); // Quantenpunkte x = new double[quants.size()];