Bildbearbeitungskleinigkeiten

Status
Nicht offen für weitere Antworten.
T

tboh

Gast
Hi!
Ich tüftle grad an nem Programm für ein paar Bilder und hab noch folgende Probleme:

1) Gibt es eine Klasse die mir php Colorangaben (also zB #FFFFFF ist Weiß) in Java Farben umrechnet (new Color(floar x, float y, float z))

2) Wenn ich nun ein Bild als BufferedImage im Programm habe, wie kann ich hier mir jetzt einzelne Pixel "ansehen" und wenn diese eine gewisse Farbe haben, sie dann in eine andere umwandeln. Ich hab in der API geschaut ob es da irgendne Funktion gibt und bin auf getRGB(int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize) gestoßen, jedoch liefert mir das ja für jeden Pixel nur nen Integer, wie krieg ich aus dem die Farbe raus? Und wie änder ich die Farbe dieses Pixels?

danke und mfG
tboh
 

Backwardsman

Bekanntes Mitglied
also so wie sich das anhört ist dein problem einfach, dass du aus einem integer-wert die rgb-werte extrahieren willst, kann das sein?

also ein int besteht aus 32 bit, das sind 8 byte und diese 8 byte nutzt man um die rgb-werte (und den alpha-kanal) anzugeben.

man kann sich das vielleicht so veranschaulichen:
bei einem int = 0xAARRGGBB sind die ersten 2 byte (AA) der alpha-kanal, gefolgt von 2 byte (RR) für rot, 2 byte (GG) für grün und zwei für blau (BB).

jetzt kannst du deinen kopf benutzen und überlegen, wie du aus einem int zum beispiel die rot-werte, also das 3. und 4. byte, extrahierst! ... dazu brauch man also keine eigene klasse

umgekehrt geht das natürlich genau so... du nimmst die rgb-werte der farbe die du möchstest, und setzt aus diesen einfach ein int zusammen.
 

SebiB90

Top Contributor
wie wärs denn einfach mit
Code:
new Color(Integer.parseInt(htmlFarbcode, 16))
sollte funktionieren oder?
das '#' muss aber aus dem string rausgenommen werden
 

Pappenheimer++

Bekanntes Mitglied
Wenn ich mir das als Außenstehender so angucke, wundert mich da eines: Wieso hat der php-Hexcode nur 6 Ziffern, also 3 Byte? Wenn es doch eigentlich 4 sein müssten? Fehlt da irgendwie der Alpha-Kanal?
 

zilti

Bekanntes Mitglied
Ja, der fehlt. Macht ja auch nicht so viel Sinn, den Desktop durchscheinen zu lassen. Die Farbangabe ist übrigens HTML.
 

VuuRWerK

Aktives Mitglied
Die Farbangabe hat nun mal rein gar nichts mit PHP zu tun ^^ Das ist eine allgemeine Farbangabe(hier in Hexadezimal) für den Browser die man im CSS, und wenn es denn sein muss im HTML, angibt. Schon trollig was hier manchmal für Gerüchte enstehen ^^

Gut Schuß
VuuRWerK ;)
 

Quaxli

Top Contributor
Steht eigentlich alles in der API und ist mit Standardmethoden lösbar ohne Bit-Shifting und rumgeparse ;)

1. Einzelen Pixel aus BufferedImage mit getRGB(int x, int y).
2. Daraus eine Color-Object: man verwendet den unter 1. zurückgegebenen int-Wert mit dem Konstrukur Color(int rgb) aus der API

Zum Ändern der Farbe funzt der umgekehrte Weg.

1. Color-Objekt erzeugen über: Konstruktor oder Color c = Color.red oder sonstiges...
2. den entsprechenden Integer-Wert kriegt man aus Color mit getRGB()
3. in BufferedImage setRGB(int x, int y, int rgb) aufrufen

Fertig
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben