我有这些卡片,上面有两种颜色。主色,然后是较深的强调色:
主要颜色是十六进制给我的,但不是口音。你能说出对主色的 ARGB 进行了什么样的混合或转换以获得更深的强调色吗?
如果这很重要,我正在针对 Android 进行开发,所以我可以访问 Color 类和 ColorFilter,这样我就可以应用所有 PorterDuff 的东西......
If you want darker Color
, you can:
RGBToHSV()
.hsv[2]
, a float with value from 0 to 1.Color
with HSVToColor()
.If you want darker Bitmap
,
PorterDuff.Mode.DARKEN
should work. You just need to calibrate COLOR
value:
private Bitmap getDarkerBitmap(Bitmap src)
{
final int COLOR = 0xAAFFFFFF;
final int WIDTH = src.getWidth();
final int HEIGHT = src.getHeight();
final Bitmap result = Bitmap.createBitmap(WIDTH, HEIGHT, src.getConfig());
final BitmapDrawable drawable = new BitmapDrawable(src);
drawable.setBounds(0, 0, WIDTH, HEIGHT);
drawable.setColorFilter(COLOR, PorterDuff.Mode.DARKEN);
drawable.draw(new Canvas(result));
return result;
}
使用此代码,如果因子 < 1,结果颜色会更暗,如果因子 > 1,结果颜色会更亮。
public static int alterColor(int color, float factor) {
int a = (color & (0xFF << 24)) >> 24;
int r = (int) (((color & (0xFF << 16)) >> 16) * factor);
int g = (int) (((color & (0xFF << 8)) >> 8) * factor);
int b = (int) ((color & 0xFF) * factor);
return Color.argb(a, r, g, b);
}
只需这样做:
int color = ....
int r = Color.red(color);
int b = Color.blue(color);
int g = Color.green(color);
int darkerColor = Color.rgb((int)(r*.9), (int)(g*.9), (int)(b*.9));
我看一下提供的答案。他们很棒。但这是在 Android 中加深 int 颜色的另一种方法。如下:
RGBToHSV()
使用方法将颜色的 RGB 转换为 HSVhsv[2]
并且一个浮点数范围从 0 到 1。HSVToColor()
然后返回这是片段:
public static int getDarkerColor(int color, float factor) {
float[] hsv = new float[3];
Color.RGBToHSV(Color.red(color), Color.green(color), Color.blue(color), hsv);
hsv[2] = hsv[2] * factor;
return Color.HSVToColor(hsv);
}
请注意,当您给出factor
0.9f 时,您希望以 10% ((1-0.9) * 100) 的比率使输入颜色变暗。
java.awt.Color.darker()
将每个 0-255 分量 (R, G, B) 乘以 0.7,然后将其转换回int
.
要使颜色变暗,您只需从红绿和蓝色成分中去除相同的量。
编辑:由于您从十六进制值中获取颜色,因此您需要将组件从中分离出来,减少其值并将其放回原处。
0xaarrggbb -> a = alpha r = 红色 g = 绿色 b = 蓝色
int color = 0xff445566;
// Get the color component:
int alpha |= a << 24;
int red |= r << 16;
int green |= g << 8;
int blue |= b;
int newalpha = alpha;
int newred = red - proportional amount ;
int newgreen = green - proportional amount ;
int newblue = blue - proportional amount ;
// Set the color component
color = (color & ~(0xFF << 24)) | (newalpha << 24);
color = (color & ~(0xFF << 16)) | (newred << 16);
color = (color & ~(0xFF << 8)) | (newgreen << 8);
color = (color & ~0xFF) | newblue;