Falschfarbenbild (lineare Grauwertspreizung)aus Grauwert-Bild erstellen

Diskutiere Falschfarbenbild (lineare Grauwertspreizung)aus Grauwert-Bild erstellen im AWT, Swing, JavaFX & SWT Bereich.
C

cupcoffee

Guten Tag an alle,
ich habe folgende Frage:
Aus einem bunten Bild ein Grauwert-Bild zu erstellen, ist mir gelungen.
Das Prinzip, der Falschfarbenzuordnung ist mir auch bekannt.
Nur bekomme ich das nicht in einen Algorithmus verfasst und ich habe keine Idee, wie
ich die jeweiligen Werte der Farben ansprechen kann. Kann mir da jemand helfen?
 

Anhänge

C

cupcoffee

Der Grauwert 50 müsste dann R(0), G(0) und B(255) bekommen.
Der Grauwert 200 bekommt dann R(255), G(0), und B(0).
Oder bekommen hier nur die Grauwerte 0, 127 und 255 Farben zugewiesen?
 
T

temi

Ich hab mich nicht mit dem Thema Falschfarbenzuordnung beschäftigt und mir nur das Bild mit den Zuordnungspfeilen angeschaut.

Da von Grau(0) und von Grau(127) ein Pfeil zu Rot(0) geht, würde ich es so interpretieren, dass Grau (0 - 127) als Rot(0) zugeordnet werden und Grau(128 - 255) dem gesamten Bereich von Rot (1 - 255). Das muss man dann halt entsprechend strecken (umrechnen). Die beiden anderen Farben entsprechend. Keine Ahnung, ob ich damit richtig liege.
 
mihe7

mihe7

So hätte ich das auch gesehen:
Java:
Color color(int value) {
    int blue = 255 - 255 * Math.min(value, 127) / 127;
    int red = 255 * Math.max(value - 127, 0) / 128;
    int green = 255 - blue - red;
    return new Color(red, green, blue);
};
 
C

cupcoffee

Danke für die Anmerkgungen, morgen setzte ich mich da mal ran.
 
C

cupcoffee

Guten Morgen,
das Bild bleibt leider grau. Ich weiß nicht, wie man die neuen Werte der Farben in das neue Bild ausgibt.
Mit "Main.image.setRGB(c,x,y) soll mit den neuen Farben in das neue Bild erstellt werden.
1597563291932.png
 
mihe7

mihe7

Naja, wenn Du value auf 0 statt auf den Grauwert setzt, brauchst Du Dich nicht zu wundern. Das Bild dürfte allerdings nicht grau sein, sondern müsste blau sein.
 
C

cupcoffee

Stimmt, ist blau.
Wie bekomme ich denn jetzt die Werte des Graubildes in die Funktion "graytorgb"?
1597574261379.png
 
mihe7

mihe7

Für Code bitte Code-Tags und keine Screenshots verwenden (die drei Punkte neben dem Smiley -> Code -> Java -> ins Textfeld kopieren).

value = Main.image.getRGB(x,y).getRed();
 
C

cupcoffee

Also mit Main.image.getRGB(x,y).getRed(); klappt leider nicht.

Code:
public static void graytorgb()                           
    {
        for (int x = 0; x < image.getTileWidth(); x++)
        {
            for (int y = 0; y < image.getHeight(); y++)
            {
                int blue = 255 - 255 * Math.min( Main.image.getRGB(x, y)getBlue() , 127) / 127;
                int red = 255 * Math.max( Main.image.getRGB(x, y)getRed() - 127, 0) / 128;
                int green = 255 - blue - red;
                Color c = new Color(red, green, blue);
                Main.image.setRGB(x,y, c.getRGB());
            }
        }
    }
"Cannot invoke getRed() on the primitve type int" Ist hier der Datentyp falsch, also der Bereich zu klein? Integer ist doch mehr als groß genug dafür.
 
C

cupcoffee

Alles klar, jetzt komme ich der Sache näher.
Kannst du mir bitte erklären, was es damit auf sich hat:
Code:
& 0xff
?
1597577148958.png
 
mihe7

mihe7

Kannst du mir bitte erklären, was es damit auf sich hat:
getRGB() liefert eine 32-Bit Ganzzahl, in der die Farbe kodiert wird. In hexadezimaler Notation etwa 0xRRGGBB, wobei RR, GG und BB natürlich für die jeweiligen Werte der betreffenden Grundfarben steht.

& ist der Operator für das binäre Und. 0xff ist die hexadezimale Schreibweise für 255, also gerade die Zahl, in der die niederwertigsten 8 Bit gesetzt sind. Zusammen ergibt das dann
Code:
  0xRRGGBB
& 0x0000FF
----------
  0x0000BB
D. h. mit getRGB() & 0xff wird der Blau-Wert ermittelt. Da im Graustufenbild die Werte aller drei Farbkanäle gleich sind, spielt es keine Rolle, welchen man nimmt.
 
Thema: 

Falschfarbenbild (lineare Grauwertspreizung)aus Grauwert-Bild erstellen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben