ホーム > デベロッパ > SophiaFramework > BREW C++ 逆引きコード集

BREW C++ プログラミング : SophiaFramework 逆引き FAQ・コード集

SFXRGBColor クラスを使って色の演算を行う

SFXRGBColor クラスは RGB 値にあわせてアルファ値を管理するためのクラスです。

BREW では RGBVAL 型を使って色を表しますが、SophiaFramework では SFXRGBColor クラスを利用します。

このクラスを利用すると色の演算を簡単に行えます。たとえば、色を明るくする場合や暗くする場合など関数を呼び出すだけで色を調整できます。

※ 数値がオーバーフローする場合や、アンダーフローする場合は適切に処理されます。

SFXRGBColor クラスの使用方法
Void SFXColorExplainer::_SFXRGBColor(Void) const
{
    // 透明度の違う赤色を準備する
    // red1 変数は通常のコンストラクタでの初期化する
    // red2 変数は POD 構造体を利用した定数初期化する
    // ( RVCT for BREW では、red2 変数は定数として扱われるので
    //   実行時初期化を防止することが可能 )
    // コンストラクタを利用する場合は、左から RGBA の順序で記述する
    // POD 構造体を利用する場合は、左から ARGB の順序で記述する

    SFXRGBColor red1(0xFF, 0x00, 0x00, 0x00);
    static SFXRGBColor::AtomRecConst red2 = {
        0xFF, 0xFF, 0x00, 0x00
    };
    SFXRGBColor green;

    // Set() 関数を使用して緑色に設定する

    green.Set(0x00, 0xFF, 0x00, 0x00);
    TRACE("r = %02X, g = %02X, b = %02X, a = %02X", green.GetRed(), green.GetGreen(), green.GetBlue(), green.GetAlpha());

    // 各要素に値を加算する

    green.Add(0x88, 0x00, 0x88, 0x00);
    TRACE("r = %02X, g = %02X, b = %02X, a = %02X", green.GetRed(), green.GetGreen(), green.GetBlue(), green.GetAlpha());

    // 青色の要素から値を減算する

    green.SubBlue(0x44);
    TRACE("r = %02X, g = %02X, b = %02X, a = %02X", green.GetRed(), green.GetGreen(), green.GetBlue(), green.GetAlpha());

    // 各要素から値を減算する
    // ( 演算結果がアンダーフローするときは、自動的に最小値になる )

    green.Sub(0xFF, 0x00, 0xFF, 0x00);
    TRACE("r = %02X, g = %02X, b = %02X, a = %02X", green.GetRed(), green.GetGreen(), green.GetBlue(), green.GetAlpha());

    // 緑色の要素に値を加算する
    // ( 演算結果がオーバーフローするときは、自動的に最大値になる )

    green.AddGreen(0x44);
    TRACE("r = %02X, g = %02X, b = %02X, a = %02X", green.GetRed(), green.GetGreen(), green.GetBlue(), green.GetAlpha());

    // 全ての要素を比較する

    TRACE("red1.Equals(red2) = %s", (red1.Equals(red2)) ? ("true") : ("false"));

    // 赤・緑・青の要素だけを比較する

    TRACE("red1.EqualsRGB(red2) = %s", (red1.EqualsRGB(red2)) ? ("true") : ("false"));
    return;
}