Java
Android
AndroidStudio
android開発
java8

Android開発、RGBカラーからHSVでの明度(Bright)調整、

私は今までの業務はiOSを担当してきましたが今の現場ではエンジニアが少ないからかAndroidの開発にも携わっています。
これからのキャリア形成において非常に貴重な経験なので若輩者ですがJavaの勉強をしています。
(トレンド的にはKotlinなんでしょうけど)
そこで実務で詰まってしまったメソッドについて残しておこうと思います。

Colorから明度の調整

bright.java
    public int convertColorFromHSV(final int color, final float brightness) {
        final float[] hsv = new float[3];
        Color.colorToHSV(color, hsv);
        hsv[2] -= brightness;
        return Color.HSVToColor(hsv);
    }

これで明度を調整することができます。
明度のMaxは1(100%)なので1から何%を暗くするかの調整となります。
例えば、明度を元のカラーから15%落としたい場合には
元のカラーにcolorbrightness に 0.15 を代入してやればいいです。

(参考) Android ドキュメント Color
https://developer.android.com/reference/android/graphics/Color

ちなみに
明度というのはHSV色空間の1種です。
HSV空間は、コンピュータグラフィックスで扱う色空間の1つで、
色相(Hue)、
彩度(Saturation Chroma)、
明度(Brightness Lightness Value)
の3成分から構成されてます。

ColorクラスはRGB色空間、もしくはARGB 色空間です。

上記のメソッドで

Color.colorToHSV(color, hsv);

を叩くと float[] hsvの配列に
hsv 配列のインデクス 0, 1, 2 に対応して、色相、彩度、明度が格納されます。
hsv[0] : 色相
hsv[1] : 彩度
hsv[2] : 明度
です。

色相に関しては 0.0 ~ 360.0 の値が格納されています。
彩度、
明度に関しては 0.0 ~ 1.0 の値が格納されています。

これのcolorToHSVのメソッドの使い方がわからずに小1時間ほどハマっておりました。