4

Android API 26 引入了处理颜色的新方法:

颜色 long 是 Android O 中引入的一种表示形式,用于将颜色存储在不同的颜色空间中,比颜色整数更精确。

现在我们可以使用新的色彩空间,如下所示:

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

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

  • 不能用于_android.graphics.Canvas
  • 不能用于_android.graphics.Paint
  • 不能用于_android.graphics.Bitmap

绘图时我应该如何使用长颜色?

例如:

    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);
4

2 回答 2

0

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

关于这些颜色有一个专门的部分。Color

例如,您可以使用静态方法从toColor.valueOf(long)转换或仅使用非静态方法直接使用它。longColorPaint.setColor(long)

long例如,您可以使用静态类型创建颜色Color.pack(float, float, float)。那是在编码部分

解码部分它说您可以使用诸如静态之类的方法Color.alpha(long)来获取long颜色的分量(在这种情况下为alpha分量)。

希望有帮助。

于 2019-11-20T22:28:42.113 回答
-1

颜色实例是不可变的,可以使用各种 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);

更多信息:https://developer.android.com

于 2017-06-12T03:53:06.563 回答