java

2013-08-02 13 views
12

Paint.setColor int için bir tamsayı bekleniyor. Ama sahip olduğum şey bir Color nesnesi. Java'da color.getIntValue() görmüyorum? Peki bunu nasıl yaparım? İstediğimjava

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

Düzeltme gibi bir şey: android.graphics.Color; ben yeterli olacağını etiketleri biri olarak android sahip düşündüm. Ama görünüşe göre değil.

+0

kullanmak istiyorum: http://stackoverflow.com/questions/6926644/android-color-to-int-conversion – TravJenkins

+0

renk nesne nereden geliyor ? İlk olarak rengi temsil eden int yerine renk nesnesini geçtiğiniz konusunda kafam karıştı. Android'deki Renk sınıfı, renkli mürekkepleri oluşturmak ve dönüştürmek için statik yöntemleri tanımlar. Benim anlayışından –

cevap

5

Color, int olarak rengi döndüren bir getRGB() yöntemine sahiptir.

+0

başlatılmamalıdır Ben android.graphics.Color kullanıyorum düzeltmeyi göstermek için düzenleyin; –

-1

deneyin bu bir:

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


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

Ben android.graphics.Color kullanıyorum; –

16

Android için geliştiriyorsanız, bunun için Color'ın yöntem rgb (int, int, int) 'dir

Yani yapacağını

myPaint.setColor(Color.rgb(int, int, int)); 
gibi bir şey Bireysel renk değerlerini almak için şu yöntemleri kullanın:

fazla bilgi hepsinden

31

Öncelikle android.graphics.Color sadece statik yöntemlerle oluşan bir sınıf thats için this document bakın. Nasıl ve neden yeni bir android.graphics.Color nesnesi oluşturdunuz?

Ama neyse ... Ben senin aslında verileri saklar ...

bir tamsayı 4 bayt oluşan bazı nesnesini kullanarak kabul edeceğim (Bu tamamen yararsız olduğunu ve nesnenin kendisi hiçbir veri depolayan) (java'da). Standart java Color nesnesinden getRGB() işlevine baktığımızda java'nın her bir renge, ARGB (Alpha-Red-Green-Blue) sırasındaki tamsayıyı bir bayta eşlediğini görebiliyoruz. şöyle özel bir yöntemle bu davranışı çoğaltabilir:

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. 
} 

Bu şekilde bireysel kırmızı, yeşil ve mavi renk bileşenleri alabilir varsayar ve renkler için geçirilen tüm değerler 0-255 olduğunu.

sizin RGB değerleri 0 ile 1 arasında bir şamandıra yüzdesi şeklinde ise dikkate aşağıdaki yöntemi: Diğerleri belirttiğimiz gibi standart bir java nesnesi kullanıyorsanız

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; 
} 

, sadece (getRGB kullanmak); Düzgün android renk sınıfını kullanmaya karar verirseniz

da yapabilirsiniz:

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 

veya

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

diğerleri belirttiğimiz gibi ... (İkinci fonksiyon% 100 alfa varsayar)

Her iki yöntem de temel olarak yukarıda oluşturulan ilk yöntemle aynı şeyi yapar.

+0

Bu değişkenler neden büyük harfle yazılıyor? –

1

Renk olarak bir değer bildirebilirsiniz.xml, ve böylece aşağıdaki kodu arayarak tamsayı değeri alabilirsiniz.

context.getColor(int resId); 
-1

Kullanım getRGB(), bu (hiçbir karmaşık programlar)

bir kısmından varsayılan RGB renk modeli (TYPE_INT_ARGB) ve varsayılan sRGB renk uzayında tamsayı piksel dizi döndürür yardımcı olur görüntü verisi.

+0

bu tam bir cevap değildir. lütfen detaylandırın. –

4

Bu aynı sorunu benziyor intvalue = Color.parseColor("#" + colorobject);