4

我有这些卡片,上面有两种颜色。主色,然后是较深的强调色:

主要颜色是十六进制给我的,但不是口音。你能说出对主色的 ARGB 进行了什么样的混合或转换以获得更深的强调色吗?

如果这很重要,我正在针对 Android 进行开发,所以我可以访问 Color 类和 ColorFilter,这样我就可以应用所有 PorterDuff 的东西......

在此处输入图像描述

4

6 回答 6

5

If you want darker Color, you can:

  1. Convert your RGB to HSV with RGBToHSV().
  2. Reduce V (lightness value). It's hsv[2], a float with value from 0 to 1.
  3. Convert HSV to 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;
}
于 2013-08-26T15:11:09.523 回答
2

使用此代码,如果因子 < 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);
}
于 2016-02-22T01:12:02.273 回答
2

只需这样做:

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));
于 2015-12-11T12:39:14.323 回答
2

我看一下提供的答案。他们很棒。但这是在 Android 中加深 int 颜色的另一种方法。如下:

  1. RGBToHSV()使用方法将颜色的 RGB 转换为 HSV
  2. 使用浮点因子减小 V(亮度值)。它在hsv[2]并且一个浮点数范围从 0 到 1。
  3. 使用方法将 HSV 转换为 ColorHSVToColor()然后返回

这是片段:

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

请注意,当您给出factor0.9f 时,您希望以 10% ((1-0.9) * 100) 的比率使输入颜色变暗。

于 2017-06-21T17:38:04.400 回答
0

java.awt.Color.darker()将每个 0-255 分量 (R, G, B) 乘以 0.7,然后将其转换回int.

于 2013-08-26T15:50:04.680 回答
0

要使颜色变暗,您只需从红绿和蓝色成分中去除相同的量。

编辑:由于您从十六进制值中获取颜色,因此您需要将组件从中分离出来,减少其值并将其放回原处。

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;
于 2013-08-26T15:09:04.800 回答