[Java]Unbekannter Farbcode

05/13/2012 12:58 Croco™#1
Hi,
ich habe ein kleines Problem und zwar habe ich folgenden Code:

Das Problem ist nun das ich keine Ahnung habe was
Quote:
-16711936
für eine Farbe ist bzw. welcher Farbcode das ist.
05/13/2012 13:05 GTRCPi#2
Haben Farbcodes nicht maximal 6 Zeichen?

Also die ersten 6 Zahlen von deinem Code, wären ein dunkelgrün.
05/13/2012 13:07 Croco™#3
Das ist das Problem ich kenne keine Farbcodes die ein - davor haben und so lange sind außer COLORREF aber das hat auch kein - davor.
05/13/2012 13:49 xNopex#4
Les dir die Dokumentation der Java API durch.. Da steht's drin..
05/13/2012 13:52 Tyrar#5
wenn es ARGB werte sind, sieht das nach einem normalen grün aus.. (255, 0, 255, 0)

einfach mal die zahl in den windoof taschenrechner kopieren, auf hex umschalten und fertig...
05/13/2012 14:08 xNopex#6
imho müsste es 7F00FF00 sein, nicht FF00FF00

EDIT: Nein hast doch Recht.. Fehler von mir.. ist FF00FF00
05/13/2012 14:12 Croco™#7
Wie kann man RGB Werte in dieses Format Konvertieren bzw. wie ?
05/13/2012 14:15 Dr. Coxxy#8
Quote:
Originally Posted by xNopex View Post
imho müsste es 7F00FF00 sein, nicht FF00FF00
wie kommst du darauf?

getRGB(int startX, int startY, int w, int h, int[] rgbArray, int offset, int scansize)
Returns an array of integer pixels in the default RGB color model (TYPE_INT_ARGB) and default sRGB color space, from a portion of the image data.

ist ein int, -16.711.936 <-> 0xFF00FF00 = knallgrün

EDIT:
Quote:
Wie kann man RGB Werte in dieses Format Konvertieren bzw. wie ?
RGB werte werden normalerweise in einem 32bit int gespeichert, das entspricht 4 Bytes.

4Bytes kann man folgendermaßen als hex zahl darstellen:

0xABCDEF01

0xAARRGGBB

jeweils 2 hex zeichen entsprechen einem Byte, zwischen 00 und FF was zahlen zwischen 0 und 255 entspricht.
das erste Byte ist in der regel der Alpha wert, darin kann helligkeit, durchsichtigkeit etc drin gespeichert sein, wichtig sind die RGB werte.

die seite hier rechnet sie dir auch direkt um:
[Only registered and activated users can see links. Click Here To Register...]
05/13/2012 14:17 xNopex#9
Hab mich verrechnet gehabt...

Quote:
Wie kann man RGB Werte in dieses Format Konvertieren bzw. wie ?
Du hast am Anfang einfach noch eine zusätzliche Information über die Transparenz. Praktisch 1Byte. Die restlichen 3Bytes bleiben die normalen RGB Werte.
05/13/2012 14:34 Croco™#10
Sry
Ich verstehe leider nur Bahnhof :(
Ist die Farbe jetzt Hexadecimal oder wie ?
Und gibt es einen Befehl in Java der zb. die Farbe (RGB) 0 255 255 in dieses "Format" umrechnet ?

Edit:
Ich hab es verstanden viel lieben dank ! :)

Edit2:
Eine Frage noch:
Warum ergibt

Decimal -> Hex
-16711936 -> FF00FF00

aber

Hex -> Decimal
FF00FF00 -> 4278255360

?
05/13/2012 15:26 Dr. Coxxy#11
den taschenrechner unten auf DWORD stellen, net QWORD.
05/13/2012 15:39 xNopex#12
Quote:
Eine Frage noch:
Warum ergibt

Decimal -> Hex
-16711936 -> FF00FF00

aber

Hex -> Decimal
FF00FF00 -> 4278255360

?
Das liegt daran, dass negative Integer Zahlen in Java im Zweierkomplement gespeichert werden:

(16711936)10 = (00000000 11111111 00000001 00000000)2
B1: 11111111 00000000 11111110 11111111
B2: 11111111 00000000 11111111 00000000

Das ist damit 0xFF00FF00.
05/18/2012 02:21 x]vIrus[x#13
Quote:
Originally Posted by ©ⓡⓞ©ⓞ View Post
Sry
Ich verstehe leider nur Bahnhof :(
Ist die Farbe jetzt Hexadecimal oder wie ?
Und gibt es einen Befehl in Java der zb. die Farbe (RGB) 0 255 255 in dieses "Format" umrechnet ?

Edit:
Ich hab es verstanden viel lieben dank ! :)

Edit2:
Eine Frage noch:
Warum ergibt

Decimal -> Hex
-16711936 -> FF00FF00

aber

Hex -> Decimal
FF00FF00 -> 4278255360

?
das erste bit entscheidet in diesem fall ( signierte ganzzahl ) ob es sich um einen positiven wert, oder negativen wert handelt.
das bit wird mit 2^x (x ist in diesem fall 31, da es sich um eine 32 bit zahl handelt) --> 2147483648, nun wird es negiert, also -2147483648, dann werden die restlichen bits dazu addiert (ohne dem ersten bit), so kommt man auf die negative zahl
hier binär visualisiert

11111111000000001111111100000000
1. bit ist 1, also negativ -->
-10000000000000000000000000000000 (-2147483648)
+01111111000000001111111100000000 (+2130771712)
=11111111000000001111111100000000 (=-16711936)

ich hoffe das war verständlich :S