2017-06-12 33 views
3

的Android API 26引入了新的方法来处理color如何使用“长”颜色?

颜色多头在安卓Ø推出存储在不同的色彩空间 颜色,比色整数更精确的表示。现在

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

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

回答

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

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