2013-08-02 18 views
12

Paint.setColor spodziewa się liczby całkowitej. Ale to, co mam, to obiekt Color. Nie widzę color.getIntValue() w Javie? Więc jak to zrobić? Co chcę jest cośJak przekonwertować kolor rgb na int w java

public Something myMethod(Color rgb){ 
    myPaint.setColor(rgb.getIntValue()); 
    ... 
} 

Correction: android.graphics.Color; myślałem mając android jako jeden z tagów byłoby wystarczające. Ale najwyraźniej nie.

+0

to wygląda na ten sam problem: http://stackoverflow.com/questions/6926644/android-color-to-int-conversion – TravJenkins

+0

Skąd Twój obiekt pochodzi kolor ? Jestem zdezorientowany, dlaczego przekazujesz obiekt Colour zamiast int reprezentujący kolor w pierwszej kolejności. Klasa kolorów w systemie Android definiuje statyczne metody tworzenia i konwersji kolorów int. Z mojego rozumienia tego nie powinienem być inicjowany –

Odpowiedz

5

ma metodę getRGB(), która zwraca kolor jako int.

+0

Edytuję, aby pokazać korektę, że używam 'android.graphics.Color;' –

-1

Spróbuj tego:

Color color = new Color (10,10,10) 


myPaint.setColor(color.getRGB()); 
+0

Używam android.graphics.Color; –

16

Jeśli tworzysz dla Androida, metoda z kolorów na to rgb (int, int, int)

Więc zrobiłbyś coś

myPaint.setColor(Color.rgb(int, int, int)); 

Aby pobrać poszczególne wartości kolorów, można użyć następujących metod:

Color.red(int color) 
Color.blue(int color) 
Color.green(int color) 

Patrz this document uzyskać więcej informacji

31

Przede wszystkim android.graphics.Color Jest to ów klasy składające się tylko z metod statycznych. Jak i dlaczego stworzyłeś nowy obiekt android.graphics.Color? (To jest całkowicie bezużyteczne, a sam obiekt przechowuje żadnych danych)

Ale tak czy inaczej ... Mam zamiar założyć używasz jakiś przedmiot, który faktycznie przechowuje dane ...

liczbą całkowitą składa się z 4 bajtów (w java). Patrząc na funkcję getRGB() ze standardowego obiektu java Colour możemy zobaczyć java mapuje każdy kolor na jeden bajt liczby całkowitej w kolejności ARGB (Alpha-Red-Green-Blue). Możemy replikować to zachowanie z niestandardową metodę następująco:

public int getIntFromColor(int Red, int Green, int Blue){ 
    Red = (Red << 16) & 0x00FF0000; //Shift red 16-bits and mask out other stuff 
    Green = (Green << 8) & 0x0000FF00; //Shift Green 8-bits and mask out other stuff 
    Blue = Blue & 0x000000FF; //Mask out anything not blue. 

    return 0xFF000000 | Red | Green | Blue; //0xFF000000 for 100% Alpha. Bitwise OR everything together. 
} 

Zakłada można jakoś odzyskać indywidualny czerwony, zielony i niebieski kolor elementów, a wszystkie wartości zdałeś się na kolorach są 0-255.

Jeśli wartości RGB są w postaci procentu pływaka między 0 a 1 Rozważmy następujący sposób:

public int getIntFromColor(float Red, float Green, float Blue){ 
    int R = Math.round(255 * Red); 
    int G = Math.round(255 * Green); 
    int B = Math.round(255 * Blue); 

    R = (R << 16) & 0x00FF0000; 
    G = (G << 8) & 0x0000FF00; 
    B = B & 0x000000FF; 

    return 0xFF000000 | R | G | B; 
} 

Jak inni stwierdzili, jeśli używasz standardowego obiektu java, wystarczy użyć getRGB ();

Jeśli zdecydujesz się skorzystać z android klasę koloru właściwie można to zrobić również:

int RGB = android.graphics.Color.argb(255, Red, Green, Blue); //Where Red, Green, Blue are the RGB components. The number 255 is for 100% Alpha 

lub

int RGB = android.graphics.Color.rgb(Red, Green, Blue); //Where Red, Green, Blue are the RGB components. 

jak inni stwierdzili ... (druga funkcja zakłada 100% alfa)

Obie metody w zasadzie robią to samo, co pierwsza metoda stworzona powyżej.

+0

Dlaczego te zmienne są pisane wielką literą? –

1

Możesz zadeklarować wartość w kolorze.xml, a tym samym można uzyskać całkowitą wartość, wywołując poniższy kod.

context.getColor(int resId); 
-1

Zastosowanie getRGB(), to pomaga (bez skomplikowanych programów)

zwraca tablicę liczb całkowitych pikseli w domyślnej RGB koloru modelu (TYPE_INT_ARGB) i domyślnej przestrzeni kolorów sRGB, z części z dane obrazu.

+0

to nie jest pełna odpowiedź. proszę rozwinąć. –

4

Chcesz użyć intvalue = Color.parseColor("#" + colorobject);

Powiązane problemy