# Graphics2D: Inhalt auf Graustufen



## Guadrion (11. August 2009)

Hi wisst ihr wie ich möglichst einfach den Inhalt eines Graphics2D in Graustufen ändern kann?

VG
marc


----------



## Thomas Darimont (11. August 2009)

Hallo,

zeichne einfach in ein BufferedImage (bufferedImage.createGraphics() ...)

und wende dann einen Graustufen-Filter an.
http://www.tutorials.de/forum/java/237843-bild-graustufen-umwandeln.html

Gruß Tom


----------



## Guadrion (11. August 2009)

Thomas Darimont hat gesagt.:


> Hallo,
> 
> zeichne einfach in ein BufferedImage (bufferedImage.createGraphics() ...)
> 
> ...



mhh hi, klingt gut, aber ich veränder das graphics2D objekt später noch und will alos einen teil erstmal in graustufen haben, dann müsst ich en bufferedimage machen und daraus wieder ein graphics2D objekt, hat da jemand ne idee?




Habe gerade deinen post gelesen, es müsste doch möglich sein,  den filter anzupassen, so dass bestimmte farbwerte (wie zum beispiel bei mir ein bestimmter rotton) nicht verändert werden^^ werds mal ausprobieren!

THX


----------



## anfängerregnäfna (14. August 2009)

Wie wäre es mit diesem Ansatz (nicht von mir)
farbe ist ein RGB Wert, der in einem int gespeichert wurde
int rot=(farbe&256*256*255)/(256*256);
int grün=(farbe&256*255)/256;
int blau=(farbe&255);
int grau=(rot+grün+blau)/3;
int neuefarbe=(grau,grau,grau);


----------



## kirdie (8. Oktober 2009)

Dieser Ansatz ist schon ganz gut, berücksichtigt aber nicht, dass das Auge für unterschiedliche Farben unterschiedlich empfindlich ist. 

„Um einen RGB-Wert in einen 8-Bit Graustufen-Wert umzurechnen kann man die Formel "G = (R+G+B)/3" verwenden. Da das menschliche Auge allerdings verschiedene Farben verschieden stark wahrnimmt, Grün am stärksten, wird oft folgende Umrechnung verwendet: "G = 0,299*R + 0,587*G + 0,114*B".“ [http://de.wikipedia.org/wiki/RGB-Farbraum]

Zitat von anfängerregnäfna
>Wie wäre es mit diesem Ansatz (nicht von mir)
>farbe ist ein RGB Wert, der in einem int gespeichert wurde
>int rot=(farbe&256*256*255)/(256*256);
>int grün=(farbe&256*255)/256;
>int blau=(farbe&255);
>int grau=(rot+grün+blau)/3;
>int neuefarbe=(grau,grau,grau);


----------



## kirdie (8. Oktober 2009)

P.S.: Diese Gewichtung kann man natürlich je nach Gegebenheit anpassen, vor allem bei Fotos kann man da sehr gute Effekte erzielen. Z.B. sind Hautunreinheiten oft rot, wenn man also die gewichtung beim rotkanal runterdreht kann man auf einem graustufenfoto eine ganz weiche, klare haut erzielen.
wenn man einen zu starken himmel hat, dreht man den blauwert runter usw. (man muss es dann natürlich an den anderen beiden gewichtungen ausgleichen)


----------

