如何使用 "long" 颜色?

How to use a "long" color?

Android API 26 介绍了处理 a color:

的新方法

Color longs are a representation introduced in Android O to store colors in different color spaces, with more precision than color ints.

现在我们可以使用新的色彩空间,像这样:

    long longGreenColor = Color.pack(0.0f, 3.1415f, 0.0f, 1.0f, ColorSpace.get(ColorSpace.Named.LINEAR_EXTENDED_SRGB));

不错,很长的颜色。现在怎么办?

绘图时如何使用长色?

例如:

    Bitmap bitmap = Bitmap.createBitmap(20, 20, Bitmap.Config.RGBA_F16, true, ColorSpace.get(ColorSpace.Named.LINEAR_EXTENDED_SRGB));
    long longColor = Color.pack(0.0f, 3.1415f, 0.0f, 1.0f, ColorSpace.get(ColorSpace.Named.LINEAR_EXTENDED_SRGB));

    bitmap.eraseColor(longColor);//ERROR
    bitmap.eraseColor(Color.toArgb(longColor));//BAD!
    bitmap.eraseColor((int) longColor);//WRONG!!!

    Paint paint = new Paint();
    paint.setColor(longColor);//ERROR

    Canvas canvas = new Canvas(bitmap);
    canvas.drawPoint(1, 1, paint);

Colors 实例是不可变的,可以使用各种 valueOf 方法之一创建。例如:

// sRGB
 Color opaqueRed = Color.valueOf(0xffff0000); // from a color int
 Color translucentRed = Color.valueOf(1.0f, 0.0f, 0.0f, 0.5f);

 // Wide gamut color
 @ColorLong long p3 = pack(1.0f, 1.0f, 0.0f, 1.0f, colorSpaceP3);
 Color opaqueYellow = Color.valueOf(p3); // from a color long

 // CIE L*a*b* color space
 ColorSpace lab = ColorSpace.get(ColorSpace.Named.LAB);
 Color green = Color.valueOf(100.0f, -128.0f, 128.0f, 1.0f, lab);

More info: https://developer.android.com

我知道问题已经很久了(不是 ColorLong :D ),但是您是否进一步向下滚动了文档?...

关于这种颜色有dedicated section in Color

比如你可以使用静态方法Color.valueOf(long) to convert from long to Color or just use the non-static method Paint.setColor(long)直接使用

您可以使用静态 Color.pack(float, float, float) for example. That's in the Encoding section.

创建类型 long 的颜色

Decoding section it says you may use a method such as the static Color.alpha(long)中获得一个long颜色的分量(在本例中为alpha分量)。

希望对您有所帮助。