4

私はこれらのカードに 2 つの色の色合いがあるカードを持っています。メインの色と、より暗いアクセントの色:

メインカラーは 16 進数で指定されていますが、アクセントは指定されていません。メイン カラーの ARGB に対して、どのようなブレンドまたは変換を行って、より暗いアクセント カラーを取得しているのか分かりますか?

それが重要な場合、私は Android に対して開発しているので、Color クラスと ColorFilter にアクセスできるので、PorterDuff のものをすべて適用できます...

ここに画像の説明を入力

4

6 に答える 6

5

より暗くしたい場合はColor、次のことができます。

  1. で RGB を HSV に変換しますRGBToHSV()
  2. V(明度値)を下げる。それhsv[2]は、0 から 1 までの値を持つ float です。
  3. HSV をColorで変換しHSVToColor()ます。

より暗くしたい場合は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;
}
于 2013-08-26T15:11:09.523 に答える
0

java.awt.Color.darker()0 ~ 255 のすべてのコンポーネント (R、G、B) を 0.7 で乗算し、それを にキャストしintます。

于 2013-08-26T15:50:04.680 に答える
0

色を暗くするには、赤、緑、青の成分から同じ量を取り除くだけです。

編集: 16 進数値から色を取得しているため、コンポーネントをそれから分離し、その値を減らして元に戻す必要があります。

0xaarrggbb -> a = アルファ 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 に答える