einen color-chooser bauen, ähnliche Farben vermeiden

Bug Fisher

Bekanntes Mitglied
Hallo,

ich habe mir einen color-chooser (gui) gebaut, was sich für mich als schwieriger herausgestellt hat, als ich dachte.
Signatur (die Klasse beerbt JComponent):

Java:
public SmallColorChooser(final int nx, final int ny, final int fieldSize)

Dies erzeugt erzeugt nx * ny gefärbte Quadrate die zur Auswahl zur Verfügung stehen.

Jetzt stand ich vor dem Problem, alle Permutationen der Farben von (0,0,0) bis (255,255,255) gleichmäßig auf nx*ny aufzuteilen. Ich glaube man nennt das Interpolation.

Schlussendlich kam ich auf die Idee, den gesamten Farbraum durch die Anzahl der Felder zu teilen, um in diesem Abstand darüber zu iterieren. Dann fasse ich den Anteil jeder Iteration als eine Zahl zur Basis 256 auf und extrahiere damit also die einzelnen der drei Komponenten:
(Das wäre sicher mit bitshift eleganter gewesen, habe ich mittlerweile gelernt)

Java:
final int base = 256;
final int step = (base*base*base-1)/(n-1);
int[] rgb = new int[3];
int v;
		
for(int i = 0; i < n; ++i) {
       //elided
	v = i*step;
	for(int j = 0; j < rgb.length; ++j) {
		rgb[j] = v%base;
		v /= base;
	}
			
	field[i].setBackground(new Color(rgb[0], rgb[1], rgb[2]));
}

Jetzt hat sich aber herausgestellt, dass es bestimmte Anzahlen von Feldern nx*ny gibt, die sehr ungünstige Interpolationen erzeugen; im schlimmsten Fall nur Grauwerte (das ist aber kein Problem mehr); störend sind sehr ähnlich wirkende Farben mit größerem Abstand zueinander.

Durch Ausprobieren fand ich heraus, dass diese sehr ähnlich wirkenden Farben die gleiche Komponentensumme haben.
Ausprobieren hiess wirklich brut-force - deswegen schreibe ich hier: mir fehlt die nötige Mathematik und das Verständnis, wann es zu solchen Effekten kommt und wann nicht.
Ich meine, ich hätte gerne irgendeine Berechnungsvorschrift, die mir nicht nur sagt, wann gleiche Komponentensummen nicht vorkommen (die gibt es), sondern mir gleich mitliefert, was eine besonders günstige Anzahl wäre.

Kann mir da jemand auf die Sprünge helfen ?
 

Thallius

Top Contributor
Ich kapiere ehrlich gesagt nur Bahnhof.

Du kannst kein dreidimensionales Array (R,G,B) in einem zweidimensionalen Rechteck abbilden. Du wirst immer eine Komponente haben die du über ein zusätzliches Control bestimmen must.

Gruss

Claus
 

Bug Fisher

Bekanntes Mitglied
Dass die Farben schliesslich in einem Rechteck landen, ist ja nur gui-Kram, eigentlich versuche ich die drei Komponenten in einer einzigen Dimension zu interpolieren - und es geht auch - nur kapiere ich nicht wann es gut geht und wann nicht so günstig.
 

Tobse

Top Contributor
Du Hast N Felder (nx * ny = N) und willst dann 255^3 / N Farben darstellen. Verstehe ich das richtig? Und beim Einteilen in gleiche Abstände kommt dieser Effekt zustande?
 

Thallius

Top Contributor
Mach es doch einfach gleich richtig und mach einen HSB requester mit einem HU farbfeld und einem B slider. Damit kannst du den Farbraum komplett abdecken und der User hat einen requester den er von allen anderen Image-Processing Programmen her kennt.

Gruss

Claus
 

Bug Fisher

Bekanntes Mitglied
Tobse hat gesagt.:
Du Hast N Felder (nx * ny = N) und willst dann 255^3 / N Farben darstellen. Verstehe
ich das richtig? Und beim Einteilen in gleiche Abstände kommt dieser Effekt zustande?

Ja, genau so ist das :(

Hier ein kleiner Ausschnitt meiner Liste der Parameter, die diese Effekte NICHT erzeugen; da kommen also keine mehrfach-gleichen Komponentensummen vor (und es sieht dann auch plausibel aus):

Code:
5x15
5x16
5x17
5x19
6x2
6x3
6x4
6x5
6x8
6x9
6x12
6x16
6x17
6x18
7x4
7x5
7x7
7x10
7x11
7x13
8x2

Thallius hat gesagt.:
Mach es doch einfach gleich richtig und mach einen HSB requester...

Ja, über andere Farbräume habe ich auch schon nachgedacht, aber es soll einfach (wie in zB Paint) für den Benutzer sein. Ausserdem habe ich mich auch an irgendwie an diesem Problem "festinteressiert" :)
Ein Würfelnetz hatte ich auch noch als Idee...

Aber ich hätte eben dafür jetzt gerne eine Antwort, wenngleich ich -arbitrary- ganz gute Parameter gewählt habe - es interessiert mich und es könnte vielleicht noch besser (eben am besten) sein :)

Das klingt alles so easy dahin geschrieben, aber ich sitze jetzt schon ~25h an meinem SmallColorChooser :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Jose05 Umgang mit Exceptions in einen Programm Allgemeine Java-Themen 2
Robert Zenz Ich brauche bitte mal kurz einen Sanity/Reality-Check betreffend Tests. Allgemeine Java-Themen 9
R Wie gestaltet man einen Authentifizierungsflow? Allgemeine Java-Themen 6
berserkerdq2 Jemand einen Tipp wie man ein Javafx-Hintergrund "dynamisch" macht Allgemeine Java-Themen 3
berserkerdq2 Text über einen Shape anzeigen (Scenebuilder) Allgemeine Java-Themen 1
Lennox Schinkel Java Kara Auf einen Java Host laufen lassen Allgemeine Java-Themen 17
A verschachtelte for-Schleife in einen Stream umwandeln? Allgemeine Java-Themen 4
N Wie mache ich einen UnitTest? Allgemeine Java-Themen 16
D Klassendesign für einen Pascal Interpreter Allgemeine Java-Themen 6
Jose05 Gibt es einen Nachteil bei dem JDK 8? Allgemeine Java-Themen 7
E Objekte in einen String packen und wieder laden Allgemeine Java-Themen 5
O Warum kann ich so keine Elemente löschen und erhalte einen IllegalStateException? Allgemeine Java-Themen 4
M Schleife für einen TicTacToe Computer Allgemeine Java-Themen 5
N Validator für einen SQL-Befehl Allgemeine Java-Themen 22
ZH1896ZH Best Practice Wie erstellt man am besten einen Kalender? Allgemeine Java-Themen 3
R Java Stream: Ist es möglich, einen stream zusammenzufassen Allgemeine Java-Themen 6
Zrebna FileUtils.cleanDirectory() - aber einen sub-Ordner "verschonen" Allgemeine Java-Themen 1
MiMa Datei verschieben hat einen Fehler?? Allgemeine Java-Themen 20
L Generator für einen Parser implementieren Allgemeine Java-Themen 13
W Haben Konstruktoren in Java eigentlich immer mindestens einen Parameter? Allgemeine Java-Themen 4
J Wie kann ich von Vornherrein einen Fokus auf ein Objekt entfernen? Allgemeine Java-Themen 3
P einen public <Optinal String> in einer anderen Klasse mit einem Int vergleichen Allgemeine Java-Themen 2
A Mithilfe von einer Nummer einen Namen finden n-Beziehung Allgemeine Java-Themen 8
B Long in einen Double umwandeln und im Label anzeigen Allgemeine Java-Themen 7
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
MoxxiManagarm Ich brauche einen smarten Ansatz Allgemeine Java-Themen 23
J Gebautes Jar per Maven in einen Docker Container kopieren Allgemeine Java-Themen 0
Drachenbauer Wie kann eine vorgegebene Farbe über einen String erkannt werden? Allgemeine Java-Themen 11
L File beim Kopieren in einen anderen Ordner umbenennen Allgemeine Java-Themen 6
E Einen Bot Programmieren. Allgemeine Java-Themen 6
F Operationen/Methoden einen WebService im Browser mit Apache Axis aufrufen Allgemeine Java-Themen 4
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
J Einen Thread in einer Schleife Allgemeine Java-Themen 2
P [Webdriver] einen Datensatz signieren Allgemeine Java-Themen 0
R MAC-Adresse eindeutig für einen PC ? Bezug zu Netzwerk, wieso ? Allgemeine Java-Themen 7
L Variablen Eigenes Objekt wie z.B. einen Integer zuweisen Allgemeine Java-Themen 3
N Wie öffne ich einen runtergeladadenen Code in IntelliJ Allgemeine Java-Themen 3
R Wie einen ClientBuilder / JarBuilder programmieren? Allgemeine Java-Themen 14
S Input/Output Beste Möglichkeit einen String in einen Datei zu Schreiben Allgemeine Java-Themen 2
L Input/Output Wie kann man in der Konsole einen Text farbig ausgeben z.b in grün Allgemeine Java-Themen 6
L Wie programmiert man einen Listener? Allgemeine Java-Themen 1
M Nanosekunden-Pause innerhalb einen Thread-Loops Allgemeine Java-Themen 3
Thallius Wie convertiere ich einen pkcs8 key in einen java lesbaren? Allgemeine Java-Themen 16
M Was braucht man, um einen Java Job zu bekommen? Allgemeine Java-Themen 8
G Substrings in einen String zusammenfassen Allgemeine Java-Themen 5
C Classpath Neue Klasse über einen Button ausführen Allgemeine Java-Themen 3
N Compiler-Fehler Warum erhalte ich einen Nullpointer Fehler? Allgemeine Java-Themen 2
P Zum src Ordner einen Projektes navigieren Allgemeine Java-Themen 8
J Abhängigkeit zwischen Rechenzeit und Speicherbedarf in einen Algorithmus Allgemeine Java-Themen 7
MaxG. Swing Wie kann man einen Dateiordner auswählen ? Allgemeine Java-Themen 3
D Kopieren von Dateien aus einem Ordner in einen anderen Allgemeine Java-Themen 6
KeVoZ_ int Werte in einen String fassen Allgemeine Java-Themen 4
RalleYTN Problem bei Schleife die durch einen 2D raum iterieren soll Allgemeine Java-Themen 1
S Einen Punkt um den Ursprung drehen Allgemeine Java-Themen 5
Tausendsassa Threads Einen Thread sich selbst schließen lassen Allgemeine Java-Themen 17
M Genaues Bugtracking - jemand einen Vorschlag? Allgemeine Java-Themen 14
L Gibt es in Java einen Property Editor? Allgemeine Java-Themen 2
S Einen übergebenen String kopieren Allgemeine Java-Themen 3
J Wie erschaffe ich einen sicheren Datenaustausch zwischen Thread und Nicht-Threads Allgemeine Java-Themen 8
L Wie kann ich einen Keystore aus existierenden Zertifikaten erstellen? Allgemeine Java-Themen 1
P Vectorelemente in einen anderen Vector kopieren Allgemeine Java-Themen 12
U in java an einen Rückgabewert aus matlab rankommen Allgemeine Java-Themen 2
B .txt Datei in einen kompletten String konvertieren Allgemeine Java-Themen 20
H Gibt es einen großen Unterschied zwischen Java 6 und Java 7? Allgemeine Java-Themen 3
M String in einen 2D array bringen Allgemeine Java-Themen 2
Y Prüfen ob ein Graph immer einen von mehren Enden erreicht Allgemeine Java-Themen 4
J (Java3D) Einen Faden programmieren - Logikproblem Allgemeine Java-Themen 5
Y Applet/Html - Wie Java-Methode aufrufen, die einen Parameter erwartet? Allgemeine Java-Themen 3
Rudolf In wie fern lohnt sich C++ für einen Javaentwickler Allgemeine Java-Themen 70
A Welches Speichermanagement für einen Kalkulator Allgemeine Java-Themen 7
S OOP Objekte als Return-Werte: Einen Klon zurückgeben oder Instanz auf das Feld? Allgemeine Java-Themen 10
J String-Typ in einen generischen Typ T umwandeln Allgemeine Java-Themen 6
S RandomAcessFile das einen InputStream wrappt..? Allgemeine Java-Themen 2
H Scanner soll einen Inputredirect einlesen, liest aber nicht jedes Wort ein. Allgemeine Java-Themen 3
H Wie erzeugt man einen Daemon? Allgemeine Java-Themen 7
S Wie beendet man einen Process in Java Platform unabhänging? Allgemeine Java-Themen 8
Z Threads Thread für einen Client Allgemeine Java-Themen 9
A nur einen Wert aus einer .conf lesen und erneuern Allgemeine Java-Themen 3
S MANIFEST DATEI hat nur einen Eintrag Allgemeine Java-Themen 14
M Einen Prozess "crashen" lassen Allgemeine Java-Themen 9
I getResponseCode(); returnt einen falschen Wert? Allgemeine Java-Themen 7
U Wie kann mit einen Java Applet Dateien erstellen,verschieben und löschen? Allgemeine Java-Themen 9
C Argument an einen Thread übergeben Allgemeine Java-Themen 4
A Framework für einen Web Service Allgemeine Java-Themen 6
I %AppData% Variable für einen Prozess setzen Allgemeine Java-Themen 23
V Gibt es einen Variablen Cast? Allgemeine Java-Themen 8
S regex für einen Link Allgemeine Java-Themen 3
M Client für einen Webservice erstellen (ONVIF) Allgemeine Java-Themen 3
T Undwandlung eines String in einen InputStream? Allgemeine Java-Themen 3
M Selbst geschriebener InputStreamReader über einen beliebigen InputStream Allgemeine Java-Themen 4
P Datei in einen String lesen Probleme bei Codierung Allgemeine Java-Themen 2
H SwingWorker statt Thread für einen Server Allgemeine Java-Themen 2
G einen Thread beim Schlafen überraschen und abschießen Allgemeine Java-Themen 3
A Variable Parameterinhalte an einen Query übergeben? Allgemeine Java-Themen 3
M einen Tag addieren Allgemeine Java-Themen 11
T In der JVM einen weiteren, unabhängigen Prozess starten Allgemeine Java-Themen 11
Schandro Datei öffnen mit... Bestimmten Dateityp mit einen Java-Programm öffnen lassen Allgemeine Java-Themen 5
B Gibt es einen Unterschied zwischen Java 1.2 und Java 2? Allgemeine Java-Themen 7
T Wie kann ich einen doppelstart vermeiden? Allgemeine Java-Themen 9
G Teilstring in einen String einfügen Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben