如何使用 "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));
不错,很长的颜色。现在怎么办?
- 不能可以用在
android.graphics.Canvas
中吗
- 可以NOT用于
android.graphics.Paint
- 可以NOT用于
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);
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);
我知道问题已经很久了(不是 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分量)。
希望对您有所帮助。
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));
不错,很长的颜色。现在怎么办?
- 不能可以用在
android.graphics.Canvas
中吗
- 可以NOT用于
android.graphics.Paint
- 可以NOT用于
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);
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);
我知道问题已经很久了(不是 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分量)。
希望对您有所帮助。