我有这些卡片上有两种颜色的色调。主色,然后是更暗的强调色:
主要颜色以十六进制给出,但不是重音。你能说出主色的ARGB正在进行什么样的混合或转换才能获得更暗的强调色?
如果重要,我会针对Android进行开发,因此我可以访问Color类和ColorFilter,因此我可以应用所有PorterDuff内容......
答案 0 :(得分:5)
如果你想要更暗Color
,你可以:
RGBToHSV()
将您的RGB转换为HSV。hsv[2]
,一个值为0到1的浮点数。HSVToColor()
将HSV转换为Color
。如果你想要更暗Bitmap
,
PorterDuff.Mode.DARKEN
应该有效。您只需要校准COLOR
值:
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 :(得分:2)
只需这样做:
f(x) = -d^T x + 1/2 x^T D x
where, d: coefficient *vector* for linear part of obj. function
D: coefficient *matrix* for quadratic
x: decision variable *vector*
and where ^T denotes the vector transpose.
答案 2 :(得分:2)
使用此代码,if if< 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);
}
答案 3 :(得分:2)
我看一下提供的答案。他们真棒。但这是在Android中使int颜色变暗的另一种方法。如下:
RGBToHSV()
方法hsv[2]
中,浮点数的范围是0到1. HSVToColor()
方法将HSV转换为Color,然后返回这是片段:
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)的速率使输入颜色变暗。
答案 4 :(得分:0)
要使颜色变暗,您只需从红色绿色和蓝色成分中移除相同的量即可。
编辑:由于您从十六进制值中获取颜色,因此需要将组件与其分开,减小其值并将其重新放入。
0xaarrggbb - &gt; 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;
答案 5 :(得分:0)
java.awt.Color.darker()
将每0-255个分量(R,G,B)与0.7相乘,然后将其转换回int
。