如何在Java中将RGB颜色转换为整数

23

Paint.setColor需要一个整数作为参数。但我有一个Color对象。在Java中没有color.getIntValue()?那我该怎么办呢?我想要的是像这样的东西:

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

更正: android.graphics.Color; 我以为把android作为标签之一就足够了。但显然不是这样。


这看起来像是同样的问题:https://dev59.com/K2w05IYBdhLWcg3w72bN - TravJenkins
你的颜色对象从哪里来?我有点困惑,为什么你在第一次传递时不直接传递代表颜色的 int 值,而是传递 Color 对象。在安卓中,Color 类定义了用于创建和转换颜色 int 值的静态方法。据我所知,它不应该被初始化。 - kalelien
9个回答

54

首先,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.

就像其他人所说的那样...(第二个函数假设 alpha 值为 100%)

这两种方法基本上与上面创建的第一种方法执行相同的操作。


5
为什么这些变量要大写? - OneCricketeer

27
如果您正在开发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) 

请参考此文档获取更多信息


12

Color类有一个getRGB()方法,该方法返回颜色值的 int表示。


我编辑以显示更正,我正在使用android.graphics.Color; - Cote Mounyo
1
如果输入是浮点数,则需要API 26。 - GMX

7
你想使用intvalue = Color.parseColor("#" + colorobject);。这个代码与颜色相关,可以将颜色值转换为整数值。

好的解决方案!^_^ - Kaaveh Mohamedi

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

1
你可以在color.xml中声明一个值,这样你就可以通过调用下面的代码来获取整数值。
context.getColor(int resId);

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

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


-2

使用getRGB(),它可以帮助你(无需复杂的程序)

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


1
这不是一个完整的答案,请详细说明。 - Martin Serrano

-3
试试这个:
Color color = new Color (10,10,10)


myPaint.setColor(color.getRGB());

我正在使用android.graphics.Color; - Cote Mounyo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接