How do I use the "long" color?
Android API 26 introduces new ways to handle color :
Colored longitudes are a representation provided in Android O for storing color in different color spaces, with greater precision than color longitudes.
We can now use new color spaces, for example:
long longGreenColor = Color.pack(0.0f, 3.1415f, 0.0f, 1.0f, ColorSpace.get(ColorSpace.Named.LINEAR_EXTENDED_SRGB));
Nice, long color. Now what?
- Can NOT be used
android.graphics.Canvas
- May NOT use
android.graphics.Paint
- May NOT be used in
android.graphics.Bitmap
How should I use long color when painting?
For example:
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);
+3
source to share
1 answer
Color instances are immutable and can be instantiated using one of the various valueOf methods. For example:
// 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);
+1
source to share