Class RGB Farbe

  • Themenstarter Seelenschnitter
  • Beginndatum
Status
Nicht offen für weitere Antworten.
S

Seelenschnitter

Gast
Hallo zusammen, ich habe ein kleines Problemchen:

Ich muss eine Klasse Farbe realisieren, das erst aus einer Farbtupel eine rrrgggbbb (z.B. 255255255) Zahl macht.
Eine Methode soll invertieren (hab ich fertig)
eine soll 2 Farben addieren (aber nicht über 255 kommen, habe ich auch fertig)
und eine Methode die zu einer Farbe eine „beliebige“ andere Farbe liefert.(daran renne ich mich gerade tot und komme nicht weiter)

Der Sinn dieser Methode ist, durch wiederholte Anwendung alle RGB-Farben zu generieren.
Betrachten Sie dazu folgenden Java-Code (c enthalte irgendeine Farbe im Format rrrgggbbb,
n sei die Anzahl der möglichen Farben):

d=gibNaechsteFarbe(c) // 1. Aufruf
d=gibNaechsteFarbe(d) // 2. Aufruf
d=gibNaechsteFarbe(d) // 3. Aufruf
...
d=gibNaechsteFarbe(d) // n-ter Aufruf

Alle Farben, die beim 1. bis zum vorletzten Aufruf erzeugt werden, sollen untereinander und
von der Anfangsfarbe c verschieden sein. Die Farbe, die beim letzten Aufruf erzeugt wird, soll
mit der Anfangsfarbe gleich sein, d. h. c und d sind nach Ausführung des Codes gleich

Das Programm mit Schiebereglern etc haben wir vorgegeben bekommen aber ich weiss einfach nicht, was ich falsch mache.

Java:
/**
 * Diese Klasse berechnet RGB Farben.
 */
public class Farbe {

    /**
    * RGB Farben im Format rrrgggbbb werden addiert,invertiert und die
    * fortlaufende Farbe wird ausgegeben.Dies l�sst sich dann mit
    * der Farbdarstellung GUI darstellen.
    *
    * @param args wird nicht verwendet
    */
    public static void main(String args[]) {

    /*
    * Wertuebergabe an die Methoden gibNaechsteFarbe,
    * addiere und invertieren.
    */

    System.out.println(gibNaechsteFarbe(255200200));
    System.out.println(addiere(250250250 , 100100100));
    System.out.println(invertiere(10128255));
    }

    /*
    * Die Methode berechneRot berechnet den Rot-Anteil aus einer
    * Farbzahl im Format rrrgggbbb, indem die Variable "farbe" durch
    * 1000000 dividiert wird.Der ausgegebene Wert wird an die Variable
    * "rot" uebergeben. Der Wert fuer "farbe" wird von den
    * spaeteren Methoden "invertiere und addiere" uebergeben.
    * Die Nachkommastelle wird dadurch entfernt,
    * dass die Zahl ein "int" Wert ist.
    */

    public static int berechneRot(int farbe) {

        int rot = (farbe / 1000000);

        return rot;
    }

    /*
    * Die Methode fuer den gruenen Farbanteil des rrrgggbbb Wertes.
    * Hier wird nochmals der rot Anteil erechnet.Der Wert gruen
    * wird errechnet, indem die Farbe Rot mit 1000000 multipliziert
    * wird und von der Variablen "farbe" subtrahiert wird. Der naechste Schritt
    * ist die Dividierung durch 1000 ,um den Gruenanteil zu erhalten.
    * Die Nachkommastelle wird auf dieselbe Weise entnfert, wie bei
    * der Errechnung des  Farbanteils "rot".
    */

    public static int berechneGruen(int farbe) {

        int rot = (farbe / 1000000);
        int gruen = ((farbe - rot * 1000000) / 1000);

        return gruen;
    }

    /*
    * Methode fuer den blauen Farbanteil. Rot und Gruen werden erneut
    * errechnet, dann erfolgt die Errechnung fuer den blauen Farbanteil.
    * Rot wird mit 1000000 multipliziert und dann von der Variablen "farbe"
    * subtrahiert.Dann folgt die multiplikation mit 1000
    * mit dem Farbanteil gruen. Dieser Wert wird nochmals von der Variablen
    * "farbe" subtrahiert. Was bleibt, ist der blaue Farbanteil.
    */

    public static int berechneBlau(int farbe) {

        int rot = (farbe / 1000000);
        int gruen = ((farbe - rot * 1000000) / 1000);
        int blau = ((farbe - rot * 1000000) - gruen * 1000);

        return blau;
    }

    /*
    * Methode um eine Zahl zu invertieren. Zuerst holst sich die Methode
    * ihren Wert �ber die Variablendeklaration "int farbe" von oben aus
    * "System.out.println(invertiere(10128255))". Um eine Invertierung zu
    * erreichen, wird der maximale Farbanteilswert "255" subtrahiert mit
    * dem rot Anteil. Als letzter Schritt werden die einzelnen Werte
    * die in Rot,Gruen und Blauf aufgeteilt sind zu einem rrrgggbbb Wert
    * zusammen gesetzt. Das errechnete Rot wird mit 1000000 multipliziert,
    * dann wird das Gruen mit 1000 multipliziert und zum rot Wert addiert
    * und zuletzt wird noch der blau Anteil hinzu addiert.
    */

    public static int invertiere(int farbe) {


        int rot = 255 - berechneRot(farbe);
        int gruen = 255 - berechneGruen(farbe);
        int blau = 255 - berechneBlau(farbe);
        int farbeZahl = (((rot * 1000000) + gruen * 1000) + blau);


    return farbeZahl;

    }

    /*
    * Methode fuer den blauen Farbanteil. Rot und Gruen werden erneut
    * errechnet, dann erfolgt die Errechnung fuer den blauen Farbanteil.
    * Rot wird mit 1000000 multipliziert und dann von der Variablen "farbe"
    * subtrahiert.Dann folgt die multiplikation mit 1000
    * mit dem Farbanteil gruen. Dieser Wert wird nochmals von der Variablen
    * "farbe" subtrahiert. Was bleibt, ist der blaue Farbanteil.
    */

    public static int addiere(int farbe1 , int farbe2) {



        int rot = ((berechneRot(farbe1) + berechneRot(farbe2)) > 255)
                  ? (rot = 0)
                  : (berechneRot(farbe1)) + (berechneRot(farbe2));
        int gruen = ((berechneGruen(farbe1) + berechneGruen(farbe2)) > 255)
                  ? (gruen = 0)
                  : (berechneGruen(farbe1)) + (berechneGruen(farbe2));
        int blau = ((berechneBlau(farbe1) + berechneBlau(farbe2)) > 255)
                  ? (rot = 0)
                  : (berechneBlau(farbe1)) + (berechneBlau(farbe2));
        int farbeZahl = (((rot * 1000000) + gruen * 1000) + blau);

    return farbeZahl;


    }

    /*
    * Methode fuer den blauen Farbanteil. Rot und Gruen werden erneut
    * errechnet, dann erfolgt die Errechnung fuer den blauen Farbanteil.
    * Rot wird mit 1000000 multipliziert und dann von der Variablen "farbe"
    * subtrahiert.Dann folgt die multiplikation mit 1000 
    * mit dem Farbanteil gruen. Dieser Wert wird nochmals von der Variablen
    * "farbe" subtrahiert. Was bleibt, ist der blaue Farbanteil.
    */

    public static int gibNaechsteFarbe(int farbe) {

        int rot = (berechneRot(farbe));
        int gruen = (berechneGruen(farbe));
        int blau = (berechneBlau(farbe));

        blau = (blau > 255) ? (blau + 1) : (blau);
        gruen = (blau == 255) & (blau == 255) ? (gruen + 1) : (gruen);
        rot = (blau == 255) & (gruen == 255) ? (rot + 1) : (rot);
        rot = (blau == 255) & (gruen == 255) & (rot == 255) ? (rot = 0) : (rot);
        int wert = (((rot * 1000000) + gruen * 1000) + blau);

    return wert;

    }


}


Ich bedanke mich schonmal im vorraus, mir rennt nur leider die Zeit davon
 
S

Seelenschnitter

Gast
Zur weiteren Erklärung:

Klicke ich auf Clean & Build Project kommt erstmal:
...\src\FarbdarstellungGUI.java:277: warning: [deprecation] setLabel(java.lang.String) in javax.swing.AbstractButton has been deprecated
jButton1.setLabel("Naechste Farbe");
1 warning


Das Reglermenu öffnet sich zwar aber leider macht er nicht das, was er soll, wenn ich auf Naechste Farbe klicke. Normal soll er dann Blau von 0 - 255 durchgehen. Dort angekommen den Grünen Schieberegler um 1 erhöhen und bei Blau wieder von 0 beginnen. Ist dann auch Gruen bei 255 angelangt soll natürlich Rot um eins erhöht werden. Sind alle auf 255 soll danach alles wieder genullt werden und der heitere Spass geht von vorne los.

Sollte ich mich im Board allerdings vertan haben, dann Entschuldigung.
 

madboy

Top Contributor
Lass am besten den ternären Operator weg (ich denke, du hast den noch nicht richtig verstanden) und verwende normale if-Abfragen. Beispiel für blau, analog dann rot und grün:
Java:
    public static int gibNaechsteFarbe(int farbe) {

        int rot = (berechneRot(farbe));
        int gruen = (berechneGruen(farbe));
        int blau = (berechneBlau(farbe));

        if(blau > 255) {
            blau = 0;
            //hier noch die nächste Farbe erhöhen.
        } else
            blau = blau + 1;
        }
...
    }

Außerdem verwende für logisches UND nicht
Code:
&
sondern
Code:
&&
. Ersteres ist ein binärer Operator und eben nicht das logische UND :)

EDIT:
Das ganze ist das gleiche Prinzip wie beim "normalen" Zählen zur Basis 10, nur hast du nun die Basis 255.
0,1,2,3,4,5,6,7,8,9,?
Bei ? gehen mir die Zahlen aus, daher setze ich die erste Stelle wieder auf 0 und die zweite Stelle wird auf 1 erhöht, dann geht's wieder von vorne los.
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D NoClassDefFoundError: Could not initialize class Allgemeine Java-Themen 0
J Class to link Java Allgemeine Java-Themen 4
C Was passt hier nicht bei der Calendar-Class Allgemeine Java-Themen 2
E Class.getResourceAsStream() gibt null zurück Allgemeine Java-Themen 2
Erwin82a Object cannot be converted to Custom Class in Lampda Expression Allgemeine Java-Themen 2
T Java Robot Class - Bot Allgemeine Java-Themen 3
S Class File Editor -> Source not found Allgemeine Java-Themen 4
G javafx "class path" exception Allgemeine Java-Themen 5
S Java class direved from inner class Allgemeine Java-Themen 6
S Inner Class Allgemeine Java-Themen 11
K Wildcard und class type Allgemeine Java-Themen 9
M Java model class ? Allgemeine Java-Themen 9
Thallius Ist meine static Helper Class Thread save? Allgemeine Java-Themen 9
S class path resource [config.properties}] cannot be opened because it does not exist Allgemeine Java-Themen 4
J Reflection Aufruf: .class durch .dll ersetzen Allgemeine Java-Themen 4
T Compiler-Fehler NoClassDefFoundError beim Laden einer Class Allgemeine Java-Themen 11
J Class Decompile als String (Procyon) Allgemeine Java-Themen 2
H Class 'java.io.BuferedReader' is not present in JRE Emulation Libary | GWT Fehler?! Allgemeine Java-Themen 0
I Datentypen String in class sicher verwahren Allgemeine Java-Themen 17
R Dynimc Class Loading Allgemeine Java-Themen 5
J Inner class + Leer-Konstruktor Allgemeine Java-Themen 1
Neumi5694 Methoden Generic: Rückgabetyp als Class-Parameter übergeben Allgemeine Java-Themen 3
D Collections.sort funktioniert nicht in exportierten .class Dateien Allgemeine Java-Themen 10
V Eclipse .class Dateien Allgemeine Java-Themen 9
KeexZDeveoper Von .class zu .java Allgemeine Java-Themen 7
N Wo ist Object.class ? Allgemeine Java-Themen 0
K Nicht alle class-Dateien im JRE? Allgemeine Java-Themen 2
M *.class Files ausführen Allgemeine Java-Themen 2
L Klassen Nested Class In Nested Class Allgemeine Java-Themen 3
perlenfischer1984 Dialect class not found exception Allgemeine Java-Themen 15
Tort-E Manifest Main-Class Allgemeine Java-Themen 8
I JSoup Class auslesen Allgemeine Java-Themen 1
K Generic class und Reflection Allgemeine Java-Themen 2
R .class Datei in .jar austauschen Allgemeine Java-Themen 2
R Java .class-File-Konstrunkt mit Programm visualisieren Allgemeine Java-Themen 18
A main-class Not found Allgemeine Java-Themen 3
T Java Class Intrumentation mit Annotations in Laufzeit Allgemeine Java-Themen 1
N Per Reflection auf (method) local inner class zugreifen? Allgemeine Java-Themen 3
P JDK installieren Error: Could not find or load main class HelloWorld.java Allgemeine Java-Themen 3
B public class JarFilter extends FileFilter « Falsch? Allgemeine Java-Themen 4
D Object nach Vererbung mit Class Object überprüfen Allgemeine Java-Themen 4
T Hash von *.class-Datein überprüfen Allgemeine Java-Themen 1
F java.lang.ClassNotFoundException: .class Allgemeine Java-Themen 5
T InvalidClassException - Read null attempting to read class descriptor for object Allgemeine Java-Themen 8
Phash Can't find Main Class Allgemeine Java-Themen 4
B Erste Schritte Plugin erkennen und Class Dateien anzeigen lassen Allgemeine Java-Themen 3
B json zu java class Allgemeine Java-Themen 2
antonbracke Aus Jar eine Class laden und damit arbeiten! Allgemeine Java-Themen 5
D Class<CAP#1> statt Class<...> Allgemeine Java-Themen 5
T Class-Objekt mit URLClassloader Allgemeine Java-Themen 7
A Class Datei aus Verzeichnis über URLClassLoader laden Allgemeine Java-Themen 2
L Class Files , Methode .delete() Allgemeine Java-Themen 13
E NetBeans warning: [options] bootstrap class path not set in conjunction with -source 1.6 Allgemeine Java-Themen 4
X Could not find the main class programm will exit (textdokument) Allgemeine Java-Themen 3
S Could not find the main class Allgemeine Java-Themen 7
B Mal wieder "Could not find the main class" Allgemeine Java-Themen 3
B Variable class in java.lang.Object Allgemeine Java-Themen 11
C Could not find the main class. Allgemeine Java-Themen 15
S Klassen .jar - eine .class datei ändern? Allgemeine Java-Themen 23
A Could not find main class: start Allgemeine Java-Themen 5
S main() class finden Allgemeine Java-Themen 7
hdi Could not find main class? Allgemeine Java-Themen 8
R Warum Class.forName(); Allgemeine Java-Themen 7
C class.class angefordert ? Allgemeine Java-Themen 2
S Methoden Class.forName() >> Methoden - Reihenfolge Allgemeine Java-Themen 5
B Test$1.class mit dem javac compiler Allgemeine Java-Themen 7
G jar Datei findet Main Class nicht... Allgemeine Java-Themen 2
P Java Editor Could not find the main class GUI. Programm will exit. Allgemeine Java-Themen 3
D class Datei einlesen Allgemeine Java-Themen 4
T Interface > Abstract > Class Allgemeine Java-Themen 11
TheDarkRose Subversion .class Dateien auch commiten? Allgemeine Java-Themen 3
D API - Beispiel + static member in inner (non static) class Allgemeine Java-Themen 2
E String name in class convertieren Allgemeine Java-Themen 4
F Änderung in .jar bzw. .class vornehmen ? Allgemeine Java-Themen 18
H2SO3- bestimmte class immer mit 1.4 compilieren Allgemeine Java-Themen 5
B class dateien "einlesen" und objekte erzeugen Allgemeine Java-Themen 6
G Unterschied MyClass.class vs this Allgemeine Java-Themen 2
S mit Class eine Klasse nur einmal instantiieren Allgemeine Java-Themen 4
Sonecc Zugriff auf Class File einer anderen Jar während der Laufzeit Allgemeine Java-Themen 2
M Klasse aus xyz.class Datei laden / package entfernen? Allgemeine Java-Themen 4
BattleMaster246 Could not find the Main class Allgemeine Java-Themen 30
N class Task extends TimerTask ohne Blockieren Allgemeine Java-Themen 15
H .class in .java umwandeln Allgemeine Java-Themen 3
T class.newinstance + try/catch-konstruktor Allgemeine Java-Themen 6
X Cannot refer to a non-final variable settings inside an inner class defined in a different method Allgemeine Java-Themen 4
J Class.forName und CLASSPATH -Problem Allgemeine Java-Themen 5
T Class-files zur Laufzeit zu Reflection-Zwecken laden Allgemeine Java-Themen 18
G Thread in Methode oder in inner class Allgemeine Java-Themen 3
woezelmann referenz der outer class aus static nested class heraus Allgemeine Java-Themen 7
reibi Main-Class in Jarfile Allgemeine Java-Themen 3
E Timer class macht einfach garnichts :/ Allgemeine Java-Themen 6
D Class.forName Allgemeine Java-Themen 2
S JavaDoc aus .class Datei extrahieren Allgemeine Java-Themen 5
mongole Class.class.getResource(...) Allgemeine Java-Themen 10
N Probleme mit .jar 'Could not find main class' Allgemeine Java-Themen 3
T Class Not Found Exception beim import von Paket Allgemeine Java-Themen 2
G Abstract class Stillfrage Allgemeine Java-Themen 4
P Class Casting: Graphics/Graphics2D Allgemeine Java-Themen 7
H2SO3- abstract class mit Beispielen in abstracten Methoden Allgemeine Java-Themen 5
Lufti Unterschied zwischen Djava.library.path und Class-Path im Manifest? Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben