如何在java中将rgb颜色转换为int

时间:2013-08-02 16:59:16

标签: java android android-layout colors paint

Paint.setColor期待一个整数。但我拥有的是Color对象。我在Java中看不到color.getIntValue()?那我该怎么做?我想要的是像

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

更正:android.graphics.Color;我认为将android作为其中一个标记即可。但显然不是。

9 个答案:

答案 0 :(得分:38)

首先,android.graphics.Color是一个仅由静态方法组成的类。你是如何以及为什么创建一个新的android.graphics.Color对象? (这完全没用,对象本身不存储数据)

但无论如何......我将假设你使用一些实际存储数据的对象......

整数由4个字节组成(在java中)。查看标准java Color对象中的函数getRGB(),我们可以看到java将每种颜色映射到整数的一个字节,顺序为ARGB(Alpha-Red-Green-Blue)。我们可以使用自定义方法复制此行为,如下所示:

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

这假设您可以以某种方式检索单独的红色,绿色和蓝色组件,并且您为颜色传递的所有值都是0-255。

如果您的RGB值采用0到1之间的浮动百分比形式,请考虑以下方法:

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

正如其他人所说,如果你使用的是标准的java对象,只需使用getRGB();

如果你决定正确使用android颜色类,你也可以这样做:

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

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

正如其他人所说......(第二功能假设100%alpha)

这两种方法基本上与上面创建的第一种方法完全相同。

答案 1 :(得分:17)

如果您正在为Android开发,Color的方法是rgb(int,int,int)

所以你会做类似

的事情
myPaint.setColor(Color.rgb(int, int, int)); 

要检索单个颜色值,您可以使用以下方法:

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

有关详细信息,请参阅this document

答案 2 :(得分:7)

Color有一个getRGB()方法,可以将颜色作为int返回。

答案 3 :(得分:5)

您想使用intvalue = Color.parseColor("#" + colorobject);

答案 4 :(得分:4)

int color =(A&amp; 0xff)&lt;&lt; 24 | (R&amp; 0xff)&lt;&lt; 16 | (G&amp; 0xff)&lt;&lt; 8 | (B&amp; 0xff);

答案 5 :(得分:1)

您可以在color.xml中声明一个值,因此您可以通过调用下面的代码来获取整数值。

context.getColor(int resId);

答案 6 :(得分:0)

int color =  Color.rgb(red, green, blue);

其中红色、绿色蓝色是 0 到 255 之间的整数值。

答案 7 :(得分:-2)

试试这个:

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


myPaint.setColor(color.getRGB());

答案 8 :(得分:-2)

使用getRGB(),它有帮助(没有复杂的程序)

  

返回默认RGB颜色模型中的整数像素数组   (TYPE_INT_ARGB)和默认的sRGB颜色空间,来自的一部分   图像数据。