19

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

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

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

4

9 回答 9

50

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

这两种方法基本上与上面创建的第一个方法做同样的事情。

于 2013-08-03T20:49:44.327 回答
26

如果您正在为 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) 

有关更多信息,请参阅此文档

于 2013-08-02T17:14:41.130 回答
10

Color有一个getRGB()方法将颜色作为int.

于 2013-08-02T17:03:39.437 回答
7

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

于 2014-07-22T11:25:17.910 回答
4

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

于 2018-05-04T07:28:07.703 回答
1

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

context.getColor(int resId);
于 2014-03-18T12:31:43.100 回答
0
int color =  Color.rgb(red, green, blue);

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

于 2021-06-10T06:53:12.023 回答
-2

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

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

于 2014-05-07T22:56:16.753 回答
-3

试试这个:

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


myPaint.setColor(color.getRGB());
于 2013-08-02T17:05:27.890 回答