前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3

12.9. 色

SophiaFramework UNIVERSE には、色を扱うクラスが用意されています。 これらのクラスを使用すると、RGB で表現される色の RGB 値をまとめて扱うことができます。 また、色の計算や、明るくしたり暗くしたりといった演算を簡単にできます。

色の演算に関するクラスとして、 単純な RGB 値で色を表すクラス (SFXRGBColor)、 立体的な矩形を描画するときに使う複数の色をまとめたクラス (SFXBevelColor)、 図形の枠と影の色をまとめたクラス (SFXFrameColor) が利用可能です。

[Note] 注意
SophiaFramework UNIVERSE では、RGBVAL 型ではなく、SFXRGBColor クラスを使用して「色」を表します。

参照: BREW API RGBVAL

12.9.1. RGB 色

表 12.7. カラークラス

クラス名 解説
SFXRGBColor 色を RGB 値で管理するクラスです。

R値(赤)、G値(緑)、B値(青)、α値 は 0 〜 255 (0x00 〜 0xFF) の範囲で設定します。

[Caution] 注意
BREW 1.x 〜 4.0 では、α値を設定しても無効です。BREW では、α値はサポートされていません。

例 12.36. 色の定義

// 色の定義 : 左からR値、G値、B値、α値
SFXRGBColor lightgrey(0xEE, 0xEE, 0xEE, 0x00); // 薄い灰色
SFXRGBColor white(0xFF, 0xFF, 0xFF, 0x00);     // 白色
SFXRGBColor grey(0xDD, 0xDD, 0xDD, 0x00);      // 灰色
SFXRGBColor blue(0x00, 0x00, 0xFF, 0x00);      // 青色
SFXRGBColor black(0x00, 0x00, 0x00, 0x00);     // 黒色

例 12.37. 矩形領域の塗り潰し

// 色の定義 : 左からR値、G値、B値、α値
SFXRGBColor lightgrey(0xEE, 0xEE, 0xEE, 0x00); // 薄い灰色
SFXRGBColor grey(0xDD, 0xDD, 0xDD, 0x00); // 薄い灰色

// 画面領域の定義 : SFXGraphics::GetDeviceSize() によって画面サイズを取得する
SFXRectangle screen(0, 0, SFXGraphics::GetDeviceSize());
// 矩形領域の定義 : 画面領域を上下左右 50 ピクセルずつ縮小した領域
SFXRectangle rectangle(SFXRectangle(0,0,SFXGraphics::GetDeviceSize()).Deflate(50, 50));

// 画面領域を塗り潰す : 第1引数に画面領域、第2引数に薄い灰色を指定する
graphics->FillRectangle(screen, lightgrey);

// 矩形領域をRGBカラーで塗り潰す : 第1引数に矩形領域、第2引数に灰色を指定する
graphics->FillRectangle(rectangle, grey);

図 12.26. 実行結果

実行結果

例 12.38. 色の取得

SFXRGBColor red(0x00, 0x00, 0xFF, 0x00); // 赤色

UInt08 r = red.GetRed();   // r = 0xFF
UInt08 g = red.GetGreen(); // g = 0x00
UInt08 b = red.GetBlue();  // b = 0x00
UInt08 a = red.GetAlpha(); // a = 0x00

例 12.39. 色の設定

// 色の定義
SFXRGBColor color; 

// R値、G値、B値、α値を設定する
color.Set(0x00, 0xFF, 0x99, 0x00);

// R値、G値、B値を 0x33、α値を 0x00 に設定する
color.Set(0x33, 0x00);

// R値、G値、B値、α値を個別に設定する
color.SetRed(0x00);
color.SetGreen(0xFF);
color.SetBlue(0x99);
color.SetAlpha(0x00);

例 12.40. 色の演算

color.Set(0x30, 0xE0, 0x40, 0x00);

// 加算
color.AddRed(0x60);     // color の R値 = 0x90
color.AddGreen(0x60);   // color の G値 = 0xFF
color.AddRGB(0x33);     // R, G, B の値をそれぞれ 0x33 を加算する(色は明るくなる)
                        // ※加算した結果、0xFF を超える場合、演算結果は 0xFF となる

// 減算
color.SubBlue(0x60);    // color の B値 = 0x00
color.SubRGB(0x33);     // R値、G値、B値をそれぞれ 0x33 を減算する(色は暗くなる)
                        // ※減算した結果、0x00 を下回る場合、演算結果は 0x00 となる

12.9.2. 影つき枠の色(フレームカラー)

表 12.8. 影つき枠(フレーム)の色管理クラス

クラス名 解説
SFXFrameColor 「影つきの枠(フレーム)」の色(フレームカラー)を管理するクラスです。

「影つきの枠(フレーム)」は、影と枠から構成され、 これらの色は RGB 色で設定します。

「影つきの枠(フレーム)」では、 下辺と右辺は影の色、 領域から影を除いた矩形領域の境界線は枠の色で描画されます。

例 12.41. フレームカラーの定義と設定

// 色の定義 : 左からR値、G値、B値、α値
SFXRGBColor blue(0x00, 0x00, 0xFF, 0x00);      // 青色
SFXRGBColor black(0x00, 0x00, 0x00, 0x00);     // 黒色

// フレームカラーの定義
SFXFrameColor frame;

// 枠の色を青色に設定する
frame.SetFrame(blue);  
// 影の色を黒色に設定する
frame.SetShadow(black); 

例 12.42. 「影つきの枠」の描画

// 色の定義 : 左からR値、G値、B値、α値
SFXRGBColor lightgrey(0xEE, 0xEE, 0xEE, 0x00); // 薄い灰色
SFXRGBColor blue(0x00, 0x00, 0xFF, 0x00);      // 青色
SFXRGBColor black(0x00, 0x00, 0x00, 0x00);     // 黒色

// フレームカラーの定義
SFXFrameColor frame;

// フレームカラーの設定
// 枠の色を青色に設定する
frame.SetFrame(blue);  
// 影の色を黒色に設定する
frame.SetShadow(black); 

// 画面領域の定義 : SFXGraphics::GetDeviceSize() によって画面サイズを取得する
SFXRectangle screen(0, 0, SFXGraphics::GetDeviceSize());
// 矩形領域の定義 : 画面領域を上下左右 50 ピクセルずつ縮小した領域
SFXRectangle rectangle(SFXRectangle(0,0,SFXGraphics::GetDeviceSize()).Deflate(50, 50));

// 画面領域を塗り潰す : 第1引数に画面領域、第2引数に薄い灰色を指定する
graphics->FillRectangle(screen, lightgrey);

// 矩形領域をフレームカラーで描画する : 第1引数に矩形領域、第2引数にフレームカラーを指定する
graphics->DrawFrame(rectangle, frame);

図 12.27. 実行結果

実行結果

例 12.43. 色の演算

frame.AddFrameRed(0x66);   // 枠の色のR値に 0x66 を加算する
frame.AddFrameRGB(0x66);   // 枠の色のR値、G値、B値に 0x66 を加算する(色は明るくなる)
frame.AddShadowBlue(0x66); // 影の色のB値に 0x66 を加算する
frame.AddRed(0x66);        // 枠の色と影の色のR値に 0x66 を加算する
frame.AddRGB(0x66);        // 枠の色と影の色のR値、G値、B値に 0x66 を加算する(色は明るくなる)

12.9.3. 立体的な矩形の色(ベベルカラー)

表 12.9. 「立体的な矩形(ベベル)」の色管理クラス

クラス名 解説
SFXBevelColor 「立体的な矩形(ベベル)」の色(ベベルカラー)を管理するクラスです。

「立体的な矩形(ベベル)」の色(べベルカラー)は、ライトカラー、ベースカラー、ダークカラーから構成され、 これらの各部分の色は RGB 色で設定します。

「立体的な矩形(ベベル)」では、 矩形の左下端を除く左辺と右上端を除く上辺はライトカラー、 矩形の左下端を除く下辺と右上端を除く右辺はダークカラー、 矩形の内部と左下端と右上端はベースカラーで描画されます。

例 12.44. 色の定義と設定

// 色の定義 : 左からR値、G値、B値、α値
SFXRGBColor white(0xFF, 0xFF, 0xFF, 0x00);     // 白色
SFXRGBColor grey(0xDD, 0xDD, 0xDD, 0x00);      // 灰色
SFXRGBColor black(0x00, 0x00, 0x00, 0x00);     // 黒色

// ベベルカラーの定義
SFXBevelColor bevel;

// ベベルカラーの設定
bevel.SetLight(white); // ライトカラーを設定する : 白色
bevel.SetBase(grey);   // ベースカラーを設定する : 灰色
bevel.SetDark(black);  // ダークカラーを設定する : 黒色

例 12.45. 立体的な矩形(べベル)の描画

// 色の定義 : 左からR値、G値、B値、α値
SFXRGBColor lightgrey(0xEE, 0xEE, 0xEE, 0x00); // 薄い灰色
SFXRGBColor white(0xFF, 0xFF, 0xFF, 0x00);     // 白色
SFXRGBColor grey(0xDD, 0xDD, 0xDD, 0x00);      // 灰色
SFXRGBColor black(0x00, 0x00, 0x00, 0x00);     // 黒色

// ベベルカラーの定義
SFXBevelColor bevel;

// ベベルカラーの設定
bevel.SetLight(white); // ライトカラーを設定する : 白色
bevel.SetBase(grey);   // ベースカラーを設定する : 灰色
bevel.SetDark(black);  // ダークカラーを設定する : 黒色

// 画面領域の定義 : SFXGraphics::GetDeviceSize() によって画面サイズを取得する
SFXRectangle screen(0, 0, SFXGraphics::GetDeviceSize());
// 矩形領域の定義 : 画面領域を上下左右 50 ピクセルずつ縮小した領域
SFXRectangle rectangle(SFXRectangle(0,0,SFXGraphics::GetDeviceSize()).Deflate(50, 50));

// 画面領域を塗り潰す : 第1引数に画面領域、第2引数に薄い灰色を指定する
graphics->FillRectangle(screen, lightgrey);

// 矩形領域をベベルカラーで塗り潰す : 第1引数に矩形領域、第2引数にベベルカラーを指定する
graphics->FillBevelRectangle(rectangle, bevel);

図 12.28. 実行結果

実行結果

例 12.46. 色の演算

bevel.AddBaseRed(0x66);   // ベースカラーのR値に 0x66 を加算する
bevel.AddBaseRGB(0x66);   // ベースカラーのRGB値に 0x66 を加算する(色は明るくなる)
bevel.AddLightBlue(0x66); // ライトカラーのB値に 0x66 を加算する
bevel.AddRed(0x66);       // ライトカラー、ベースカラー、ダークカラーのR値に 0x66 を加算する
bevel.AddRGB(0x66);       // ライトカラー、ベースカラー、ダークカラーのRGB値に 0x66 を加算する(色は明るくなる)

12.9.4. SFXGraphics インスタンスの色設定

図形やテキストを描画するとき、色を指定する方法は2種類あります。

例 12.47. 描画関数の引数で指定する方法

// グラフィックスオブジェクトの取得
SFXGraphicsPtr graphics = SFXGraphics::GetInstance();

// 色の定義 : 左からR値、G値、B値、α値
SFXRGBColor color(0x00, 0xFF, 0x00, 0x00);

// テキストを color 色で描画する
graphics->DrawSingleText("text", SFXGrid(10, 20), color);

例 12.48. SetForeColor 関数を使用して指定する方法

SFXGraphicsPtr graphics = SFXGraphics::GetInstance();

SFXRGBColor green(0x00, 0xFF, 0x00, 0x00); // 緑色

// 前景色を緑色に設定する
graphics->SetForeColor(green);

// テキストを緑色で描画する
graphics->DrawSingleText("text", SFXGrid(10, 20));
[Note] 注意

引数で色を指定した場合、SFXGraphics::DrawSingleText 関数の内部で SFXGraphics::SetForeColor 関数が呼び出されます。 SFXGraphics::DrawSingleText 関数を複数回呼び出す場合は後者の方法を使います。