Qt QColor::getHslF()徹底解説:色のHLS変換と活用法

2025-05-27

この関数は、以下のように定義されています。

void QColor::getHslF(qreal *h, qreal *s, qreal *l, qreal *a = nullptr) const

各引数の意味は以下の通りです。

  • a (qreal* = nullptr): アルファチャンネル(不透明度)の値を格納するためのポインタ。これはオプションであり、指定しない場合はアルファチャンネルの値は取得されません。
  • l (qreal*): 輝度 (Lightness) の値を格納するためのポインタ。
  • s (qreal*): 彩度 (Saturation) の値を格納するためのポインタ。
  • h (qreal*): 色相 (Hue) の値を格納するためのポインタ。

HSLモデルについて

HSLモデルは、色を人間の知覚に近い形で表現するためのカラーモデルです。

  • A (Alpha - アルファチャンネル): 色の不透明度を表します。0(完全に透明)から1(完全に不透明)の範囲で表現されます。
  • L (Lightness - 輝度/明度): 色の明るさを表します。0から100%の範囲で表現され、0%は黒、100%は白となります。getHslF()では、0.0から1.0の浮動小数点数で正規化された値が返されます。
  • S (Saturation - 彩度): 色の鮮やかさを表します。0から100%の範囲で表現され、0%は灰色、100%は最も鮮やかな色となります。getHslF()では、0.0から1.0の浮動小数点数で正規化された値が返されます。
  • H (Hue - 色相): 色の種類を表します。0から359の範囲で角度として表現され、赤が0度、緑が120度、青が240度となります。getHslF()では、0.0から1.0の浮動小数点数で正規化された値が返されます。

なぜ "F" が付くのか?

QtのQColorクラスには、RGB、HSV、CMYK、HSLといった様々なカラーモデルを扱うための関数が用意されています。これらの関数の中には、整数値でコンポーネントを扱うものと、浮動小数点数でコンポーネントを扱うものがあります。

  • 浮動小数点数版 (例: getHslF()): 各コンポーネントの値を0.0から1.0の浮動小数点数で正規化して取得します。これは、より高い精度で色を扱いたい場合や、他のシステムとの連携で0.0-1.0の範囲が標準的に使われる場合に便利です。
  • 整数値版 (例: getHsl()): 各コンポーネントの値を特定の整数範囲(例: Hは0-359、SとLは0-255)で取得します。

getHslF()の「F」は、"Float"(浮動小数点数)を意味し、各成分が浮動小数点数で返されることを示しています。

#include <QColor>
#include <QDebug>

int main() {
    QColor color(Qt::red); // 赤色を作成

    qreal h, s, l, a;
    color.getHslF(&h, &s, &l, &a);

    qDebug() << "Hue (H):" << h;         // 0.0に近いはず
    qDebug() << "Saturation (S):" << s;  // 1.0に近いはず
    qDebug() << "Lightness (L):" << l;   // 0.5に近いはず
    qDebug() << "Alpha (A):" << a;       // 1.0(不透明)

    QColor customColor(100, 150, 200, 128); // カスタムの色(半透明)
    customColor.getHslF(&h, &s, &l, &a);

    qDebug() << "\nCustom Color HSLF:";
    qDebug() << "Hue (H):" << h;
    qDebug() << "Saturation (S):" << s;
    qDebug() << "Lightness (L):" << l;
    qDebug() << "Alpha (A):" << a;

    return 0;
}

この例では、Qt::red(赤色)のHSL値と、RGBで指定したカスタム色のHSL値を浮動小数点数で取得しています。



よくあるエラーとトラブルシューティング

ポインタのNULLチェック不足 / 無効なポインタ

エラーの症状
アプリケーションがクラッシュする、不正なメモリアクセスエラー(セグメンテーション違反など)が発生する。

原因
getHslF()の引数として渡すqrealポインタが、有効なメモリを指していない(NULLポインタを渡している、または解放済みのメモリを指している)場合に発生します。特に、オプション引数であるアルファチャンネルのポインタ(qreal *a = nullptr)を省略せずに使う際に、そのポインタを初期化し忘れることがあります。

トラブルシューティング

  • デバッグツール
    デバッガを使用して、getHslF()呼び出し前のポインタが有効なアドレスを指しているかを確認します。
  • オプション引数の扱い
    アルファチャンネルの値が必要ない場合は、a引数を省略するか、意図的にnullptrを渡します。
    qreal h, s, l;
    QColor color(Qt::blue);
    color.getHslF(&h, &s, &l); // アルファチャンネルは取得しない
    
  • ポインタの初期化
    qreal変数を宣言し、そのアドレスを&演算子で渡すようにします。
    qreal h, s, l, a; // 変数を宣言
    QColor color(Qt::blue);
    color.getHslF(&h, &s, &l, &a); // アドレスを渡す
    

無効なQColorオブジェクトからの取得

エラーの症状
期待しないHLS値が返される、または0.0などのデフォルト値が返される。

原因
QColorオブジェクトがisValid()ではない状態(無効な色)でgetHslF()を呼び出すと、結果が未定義になる可能性があります。たとえば、無効な色名でQColorを初期化した場合などです。

トラブルシューティング

  • QColorの初期化方法の確認
    • RGB値で初期化する場合、0-255の範囲(または浮動小数点数の0.0-1.0)内に収まっているか確認します。
    • 色名で初期化する場合、Qtが認識する有効な色名(QColor::colorNames()で確認可能)を使用しているか確認します。
  • isValid()の確認
    getHslF()を呼び出す前に、QColor::isValid()を使って色が有効であるかを確認します。
    QColor myColor("nonExistentColorName"); // 無効な色名
    if (myColor.isValid()) {
        qreal h, s, l, a;
        myColor.getHslF(&h, &s, &l, &a);
        // HSL値を使用
    } else {
        qWarning() << "無効なQColorオブジェクトです。";
    }
    

浮動小数点数演算の精度誤差

エラーの症状
取得したHLS値が、設定した元の値とごくわずかに異なる。特に、整数値で設定した色を浮動小数点数で取得した場合や、色空間変換を繰り返した場合に顕著。

原因
QColorは内部的に色のコンポーネントを16ビット整数で格納しているため、qreal(通常はdouble)のような浮動小数点数との間で変換を行う際に、ごくわずかな丸め誤差が生じることがあります。これは特にsetRgbF()などで浮動小数点数で設定し、getHslF()で取得する際に発生しやすいです。

トラブルシューティング

  • 誤差を最小限に抑える設計
    色の計算や変換を必要最小限に抑えることを検討します。何度も色空間を変換すると、誤差が累積する可能性があります。
  • 許容誤差の考慮
    浮動小数点数の比較を行う場合、厳密な等価性ではなく、ある程度の許容誤差(epsilon)を設けて比較します。
    // 正しくない比較
    // if (h == 0.5)
    
    // 正しい比較(許容誤差を設定)
    const qreal EPSILON = 0.0001;
    if (qAbs(h - 0.5) < EPSILON) {
        // ...
    }
    

特定の色(白、黒、灰色)のHLS値の解釈

エラーの症状
白、黒、または完全に彩度のない灰色の場合に、色相(H)の値が0.0または未定義(NaN)になる。

原因
HSLモデルにおいて、白、黒、または完全に彩度のない灰色の場合、色相(Hue)は意味を持ちません。これらの色には特定の色味がないため、色相を計算できないためです。getHslF()は、これらの場合に色相を0.0として返すか、Qtのバージョンによっては不定の値(NaN)を返すことがあります。

トラブルシューティング

  • 仕様の理解
    HLSモデルの特性として、これらの特定の色における色相の挙動を理解しておくことが重要です。
  • 輝度(L)と彩度(S)の確認
    色相の値を使用する前に、彩度(S)が非常に低い(0.0に近い)か、輝度(L)が0.0(黒)または1.0(白)に近いかどうかを確認します。
    qreal h, s, l;
    QColor color(Qt::black); // またはQt::white, QColor(128, 128, 128)
    color.getHslF(&h, &s, &l);
    
    if (qAbs(s) < EPSILON || qAbs(l) < EPSILON || qAbs(l - 1.0) < EPSILON) {
        qDebug() << "この色は彩度がないか、黒または白なので、色相は意味を持ちません。";
    } else {
        qDebug() << "Hue:" << h;
    }
    

Qtバージョンの違い

エラーの症状
あるQtバージョンでは動作したが、別のバージョンでは予期しない挙動を示す。

原因
ごく稀に、Qtのマイナーアップデートやメジャーバージョンアップで、内部的な色の計算ロジックに微細な変更が入ることがあります。また、古いQtバージョンではqrealdoubleではなくfloatにエイリアスされている可能性も完全にゼロではありません(通常はdouble)。

  • テスト環境
    複数のQtバージョンでコードをテストし、互換性の問題を特定します。
  • Qtのドキュメント確認
    使用しているQtのバージョンに対応する公式ドキュメントで、QColor::getHslF()の挙動に特記すべき変更がないか確認します。
  • ユニットテスト
    色変換のような計算ロジックは、ユニットテストで様々な入力値(特に境界値や特殊な色)に対する出力を確認し、意図した通りに動作するかを検証することが非常に有効です。
  • エラーハンドリングとログ出力
    エラーが発生しそうな箇所には、isValid()チェックやポインタのNULLチェックを含め、問題が発生した場合に適切な警告やエラーメッセージを出力するようにします。qDebug(), qWarning(), qCritical()などを活用します。


例1:基本的なHLS値の取得

最も基本的な使い方です。QColorオブジェクトからHLS値とアルファチャンネル(不透明度)を取得します。

#include <QApplication> // Qtアプリケーションの基盤
#include <QColor>       // QColorクラス
#include <QDebug>       // デバッグ出力用

int main(int argc, char *argv[])
{
    QApplication app(argc, argv); // QApplicationオブジェクトはQtアプリケーションに必須

    // 1. QColorオブジェクトの作成
    //    今回はRGB値で赤色を定義します
    QColor redColor(255, 0, 0); // R:255, G:0, B:0 (赤)

    // 2. HLS値とアルファチャンネルを格納するqreal変数を宣言
    qreal hue, saturation, lightness, alpha;

    // 3. getHslF()を呼び出して値を取得
    redColor.getHslF(&hue, &saturation, &lightness, &alpha);

    // 4. 取得した値をデバッグ出力
    qDebug() << "--- Red Color (RGB: 255, 0, 0) ---";
    qDebug() << "Hue (H):" << hue;           // 0.0に非常に近い値 (赤)
    qDebug() << "Saturation (S):" << saturation; // 1.0 (完全に鮮やか)
    qDebug() << "Lightness (L):" << lightness;   // 0.5 (中間の明るさ)
    qDebug() << "Alpha (A):" << alpha;         // 1.0 (完全に不透明)

    // 別の色の例:青色
    QColor blueColor(0, 0, 255); // R:0, G:0, B:255 (青)
    blueColor.getHslF(&hue, &saturation, &lightness, &alpha);

    qDebug() << "\n--- Blue Color (RGB: 0, 0, 255) ---";
    qDebug() << "Hue (H):" << hue;           // 約 0.666... (青)
    qDebug() << "Saturation (S):" << saturation; // 1.0
    qDebug() << "Lightness (L):" << lightness;   // 0.5
    qDebug() << "Alpha (A):" << alpha;         // 1.0

    // 白色の例(色相が意味を持たないケース)
    QColor whiteColor(255, 255, 255); // 白
    whiteColor.getHslF(&hue, &saturation, &lightness, &alpha);

    qDebug() << "\n--- White Color (RGB: 255, 255, 255) ---";
    qDebug() << "Hue (H):" << hue;           // 0.0 (色相は意味を持たない)
    qDebug() << "Saturation (S):" << saturation; // 0.0 (彩度がない)
    qDebug() << "Lightness (L):" << lightness;   // 1.0 (最も明るい)
    qDebug() << "Alpha (A):" << alpha;         // 1.0

    return 0;
}

解説

  • 白や黒、灰色のように彩度がない色の場合、色相は0.0として返されます。これはHLSモデルの特性であり、色味がないため色相を特定できないからです。
  • 赤色のHLS値は、色相が0.0(赤の開始点)、彩度が1.0(完全に鮮やか)、輝度が0.5(中間)となります。
  • &演算子を使って変数のアドレスを渡し、getHslF()がそのアドレスに結果を書き込みます。
  • qrealはQtが提供する浮動小数点型で、通常はdoubleに解決されます。
  • QApplicationはQtプログラムの基本的なイベントループを提供するために必要ですが、この例ではGUIは表示されず、デバッグ出力のみが行われます。

例2:HLS値を変更して新しい色を作成する

getHslF()で取得したHLS値の一部を変更し、それを使って新しいQColorオブジェクトを作成する例です。これは、色のバリエーション(例えば、同じ色相で明るさだけを変えるなど)を作る際に非常に役立ちます。

#include <QApplication>
#include <QColor>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QColor originalColor(Qt::magenta); // マゼンタ色

    qreal h, s, l, a;
    originalColor.getHslF(&h, &s, &l, &a);

    qDebug() << "--- Original Color (Magenta) ---";
    qDebug() << "Hue (H):" << h;
    qDebug() << "Saturation (S):" << s;
    qDebug() << "Lightness (L):" << l;
    qDebug() << "Alpha (A):" << a;

    // 例1:輝度だけを暗くする (元の輝度を半分にする)
    QColor darkerColor = QColor::fromHslF(h, s, l * 0.5, a); // QColor::fromHslFで新しい色を作成

    qDebug() << "\n--- Darker Color (Lightness * 0.5) ---";
    qDebug() << "New H:" << darkerColor.hslHueF();      // fromHslFで設定した値と同じ
    qDebug() << "New S:" << darkerColor.hslSaturationF();
    qDebug() << "New L:" << darkerColor.hslLightnessF(); // 約 0.25
    qDebug() << "New A:" << darkerColor.alphaF();

    // 例2:彩度を落として灰色に近づける
    QColor desaturatedColor = QColor::fromHslF(h, s * 0.2, l, a); // 彩度を20%に

    qDebug() << "\n--- Desaturated Color (Saturation * 0.2) ---";
    qDebug() << "New H:" << desaturatedColor.hslHueF();
    qDebug() << "New S:" << desaturatedColor.hslSaturationF(); // 約 0.2
    qDebug() << "New L:" << desaturatedColor.hslLightnessF();
    qDebug() << "New A:" << desaturatedColor.alphaF();

    // 例3:色相だけを変えて別の色にする (マゼンタからシアンへ)
    // マゼンタのHueは約0.833、シアンは0.5
    QColor newHueColor = QColor::fromHslF(0.5, s, l, a); // 色相をシアンに

    qDebug() << "\n--- New Hue Color (Cyan) ---";
    qDebug() << "New H:" << newHueColor.hslHueF();       // 約 0.5
    qDebug() << "New S:" << newHueColor.hslSaturationF();
    qDebug() << "New L:" << newHueColor.hslLightnessF();
    qDebug() << "New A:" << newHueColor.alphaF();

    return 0;
}

解説

  • hslHueF(), hslSaturationF(), hslLightnessF(), alphaF()は、QColorオブジェクトのHLSおよびアルファの各成分を個別に取得するためのコンビニエンス関数です。
  • このように、getHslF()で既存の色の情報を取得し、それを基にfromHslF()で新しい色を生成するパターンは非常に一般的です。
  • QColor::fromHslF(h, s, l, a)は、HLS値とアルファチャンネルを浮動小数点数で指定して、新しいQColorオブジェクトを作成するための静的メソッドです。

getHslF()を使って、ある色から別の色へ、HLS値を段階的に変化させることでグラデーションを生成する例です。

#include <QApplication>
#include <QColor>
#include <QDebug>
#include <QList> // 色のリストを保持するため

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QColor startColor(Qt::green); // 開始色:緑
    QColor endColor(Qt::darkBlue); // 終了色:濃い青

    qreal startH, startS, startL, startA;
    startColor.getHslF(&startH, &startS, &startL, &startA);

    qreal endH, endS, endL, endA;
    endColor.getHslF(&endH, &endS, &endL, &endA);

    const int numSteps = 10; // グラデーションのステップ数
    QList<QColor> gradientColors;

    qDebug() << "--- Generating " << numSteps << " Gradient Colors ---";

    for (int i = 0; i <= numSteps; ++i) {
        qreal t = static_cast<qreal>(i) / numSteps; // 0.0から1.0までの補間係数

        // H, S, L, Aを線形補間
        qreal interpolatedH = startH + (endH - startH) * t;
        qreal interpolatedS = startS + (endS - startS) * t;
        qreal interpolatedL = startL + (endL - startL) * t;
        qreal interpolatedA = startA + (endA - startA) * t;

        // 色相が0.0と1.0をまたぐ場合(例えば赤から青へ)は、
        // 短い方のパスを選ぶために特別な処理が必要になることがあります。
        // ここでは単純な線形補間ですが、複雑なグラデーションでは注意が必要です。
        if (qAbs(interpolatedH - startH) > 0.5) { // 半周以上離れている場合
             if (interpolatedH > startH) {
                 interpolatedH -= 1.0;
             } else {
                 interpolatedH += 1.0;
             }
        }
        // 再度補間し直す(これで最短経路になる)
        interpolatedH = startH + (endH - startH) * t;
        // 0.0から1.0の範囲に正規化
        interpolatedH = fmod(fmod(interpolatedH, 1.0) + 1.0, 1.0);


        QColor interpolatedColor = QColor::fromHslF(interpolatedH, interpolatedS, interpolatedL, interpolatedA);
        gradientColors.append(interpolatedColor);

        qDebug() << "Step " << i << ": RGB(" << interpolatedColor.red() << ","
                 << interpolatedColor.green() << "," << interpolatedColor.blue() << ") | HSLF("
                 << interpolatedColor.hslHueF() << "," << interpolatedColor.hslSaturationF() << ","
                 << interpolatedColor.hslLightnessF() << ")";
    }

    // グラデーションの色のリストがgradientColorsに格納されています。
    // これをGUIの描画などに利用できます。

    return 0;
}
  • 最終的に生成された色のリストは、QPainterを使用してウィジェットに描画したり、画像処理に応用したりできます。
  • 色相の補間に関する注意
    HSLの色相は円環状(0.0が赤、1.0も赤)であるため、例えば赤(0.0)から青(約0.66)へグラデーションする場合、単純な線形補間だと長い方の経路(0.0→0.1→...→0.66)を通ってしまいます。短い方の経路(0.0→-0.1→...→0.66、または1.0→0.9→...→0.66)を通るようにするには、色相の差が0.5(半周)を超える場合に調整が必要です。上記のコードにはそのための簡単な処理を追加していますが、より堅牢な色相補間ロジックが必要な場合もあります。
  • tは補間係数で、0.0から1.0まで変化します。
  • この例では、線形補間(lerp)を使用して、開始色と終了色のHLS各成分を段階的に変化させています。


整数値でのHLS値取得 (QColor::getHsl(), QColor::getHsv())

getHslF()が浮動小数点数(0.0-1.0)で値を返すのに対し、整数値でHLSやHSV(色相、彩度、明度)を取得するメソッドがあります。

  • void QColor::getHsv(int *h, int *s, int *v, int *a = nullptr) const

    • 特徴
      HLSと似ていますが、L(Lightness)の代わりにV(Value/明度)を使用します。色相は0-359、彩度と明度は0-255の整数値で返されます。アルファも0-255です。
    • HSLとHSVの違い
      • HSL (Hue, Saturation, Lightness)
        人間の知覚により近いモデルで、Lightnessは完全に黒(0)から完全に白(255)までの中央に灰色を持ちます。
      • HSV (Hue, Saturation, Value)
        グラフィックソフトウェアなどでよく使われるモデルで、Valueは黒(0)から最も鮮やかな色(255)まで変化します。最大値は常にその色の最も明るい状態です。
    • 用途
      グラフィック処理や画像のピクセル操作など、HSVモデルが適している場合に。
    #include <QColor>
    #include <QDebug>
    
    int main() {
        QColor color(Qt::red);
        int h, s, v, a;
        color.getHsv(&h, &s, &v, &a); // HSVで取得
    
        qDebug() << "--- getHsv() Example ---";
        qDebug() << "Hue (H):" << h << "(0-359)";
        qDebug() << "Saturation (S):" << s << "(0-255)";
        qDebug() << "Value (V):" << v << "(0-255)";
        qDebug() << "Alpha (A):" << a << "(0-255)";
    
        return 0;
    }
    
    • 特徴
      色相は0-359、彩度と輝度は0-255の整数値で返されます。アルファも0-255です。
    • 用途
      主に整数値ベースのシステムや、細かな精度が不要な場合に使用します。
    #include <QColor>
    #include <QDebug>
    
    int main() {
        QColor color(Qt::red);
        int h, s, l, a;
        color.getHsl(&h, &s, &l, &a); // 整数値で取得
    
        qDebug() << "--- getHsl() Example ---";
        qDebug() << "Hue (H):" << h << "(0-359)";
        qDebug() << "Saturation (S):" << s << "(0-255)";
        qDebug() << "Lightness (L):" << l << "(0-255)";
        qDebug() << "Alpha (A):" << a << "(0-255)";
    
        return 0;
    }
    

個別のコンポーネント取得 (hslHueF(), hslSaturationF(), etc.)

getHslF()は全てのHLS成分を一度にポインタで取得しますが、特定の成分だけが必要な場合は、個別のgetter関数を使用できます。これらも浮動小数点数で0.0-1.0の範囲で値を返します。

  • qreal QColor::hsvValueF() const (HSVの明度)
  • qreal QColor::hsvSaturationF() const (HSVの彩度)
  • qreal QColor::hsvHueF() const (HSVの色相)
  • qreal QColor::alphaF() const (アルファチャンネル)
  • qreal QColor::hslLightnessF() const
  • qreal QColor::hslSaturationF() const
  • qreal QColor::hslHueF() const

用途
特定のHLS/HSV成分だけを参照したい場合や、コードをより簡潔に記述したい場合に便利です。

#include <QColor>
#include <QDebug>

int main() {
    QColor color(Qt::cyan); // シアン色

    qDebug() << "--- Individual HSLF Getters ---";
    qDebug() << "Hue (H):" << color.hslHueF();
    qDebug() << "Saturation (S):" << color.hslSaturationF();
    qDebug() << "Lightness (L):" << color.hslLightnessF();
    qDebug() << "Alpha (A):" << color.alphaF(); // alphaF()はQColor共通

    qDebug() << "\n--- Individual HSV Getters ---";
    qDebug() << "Hue (H):" << color.hsvHueF();
    qDebug() << "Saturation (S):" << color.hsvSaturationF();
    qDebug() << "Value (V):" << color.hsvValueF();

    return 0;
}

RGB値の取得 (redF(), greenF(), blueF(), alphaF(), getRgbF())

多くのグラフィックシステムではRGB(赤、緑、青)モデルが基本であるため、HSLからRGBへの変換も頻繁に行われます。QColorはRGB値も浮動小数点数で取得する機能を提供しています。

  • void QColor::getRgbF(qreal *r, qreal *g, qreal *b, qreal *a = nullptr) const
  • qreal QColor::alphaF() const
  • qreal QColor::blueF() const
  • qreal QColor::greenF() const
  • qreal QColor::redF() const

用途
HSLで処理した結果を最終的にRGBピクセルデータとして利用する場合や、他のRGBベースのライブラリと連携する場合に不可欠です。

#include <QColor>
#include <QDebug>

int main() {
    // HSLで色を定義 (例: 明るい紫)
    QColor hslColor = QColor::fromHslF(0.75, 0.8, 0.6, 1.0); // H:紫, S:鮮やか, L:明るめ

    qDebug() << "--- HSL Color to RGBF ---";
    qDebug() << "Original HSLF: H(" << hslColor.hslHueF()
             << ") S(" << hslColor.hslSaturationF()
             << ") L(" << hslColor.hslLightnessF()
             << ") A(" << hslColor.alphaF() << ")";

    // 個別のRGBFコンポーネントを取得
    qDebug() << "Red (R):" << hslColor.redF();
    qDebug() << "Green (G):" << hslColor.greenF();
    qDebug() << "Blue (B):" << hslColor.blueF();

    // getRgbF()で一度に取得
    qreal r, g, b, a;
    hslColor.getRgbF(&r, &g, &b, &a);
    qDebug() << "RGBF (using getRgbF): R(" << r << ") G(" << g << ") B(" << b << ") A(" << a << ")";

    return 0;
}

印刷業界でよく使用されるCMYK(シアン、マゼンタ、イエロー、キープレート/ブラック)モデルもサポートされています。

  • qreal QColor::cmykBlackF() const
  • qreal QColor::cmykYellowF() const
  • qreal QColor::cmykMagentaF() const
  • qreal QColor::cmykColorF() const
  • void QColor::getCmykF(qreal *c, qreal *m, qreal *y, qreal *k, qreal *a = nullptr) const

用途
印刷物の色指定や、CMYKベースの画像処理を行う場合に利用します。

#include <QColor>
#include <QDebug>

int main() {
    QColor color(Qt::blue); // 青色

    qreal c, m, y, k, a;
    color.getCmykF(&c, &m, &y, &k, &a);

    qDebug() << "--- CMYK Example ---";
    qDebug() << "Cyan (C):" << c;
    qDebug() << "Magenta (M):" << m;
    qDebug() << "Yellow (Y):" << y;
    qDebug() << "Black (K):" << k;
    qDebug() << "Alpha (A):" << a;

    return 0;
}

QColor::getHslF()はHLSモデルで色を浮動小数点数で取得する特定の目的のために設計されていますが、QtのQColorクラスは非常に多機能であり、目的や要件に応じて様々なカラーモデルと取得方法を提供しています。

  • CMYK形式で色を扱いたい場合
    getCmykF()
  • RGB形式で色を扱いたい場合
    redF(), greenF(), blueF(), getRgbF()
  • 特定のHLS/HSVコンポーネントだけが欲しい場合
    hslHueF(), hslSaturationF(), hslLightnessF(), hsvHueF(), hsvSaturationF(), hsvValueF()
  • 整数値でHLS/HSVを扱いたい場合
    getHsl() / getHsv()