この章の目次にもどる
前頁:2.14 エンディアン変換にもどる
次頁:2.16 付箋固有データ処理にすすむ

2.15 色変換

□ カラー情報

typedef struct ColorSpec {  /* color specification */
    W       attr;           /* カラー属性 */
    H       info[4];        /* カラー情報 */
    COLOR   *colmap;        /* ptr to color map */
} CSPEC;

□ デバイス情報

typedef struct  {
    H   attr;           /* デバイス属性 */
    H   planes;         /* プレーン数 */
    H   pixbits;        /* ピクセルビット数(境界/有効) */
    H   hpixels;        /* 横のピクセル数 */
    H   vpixels;        /* 縦のピクセル数 */
    H   hres;           /* 横の解像度 */
    H   vres;           /* 縦の解像度 */
    H   color[4];       /* カラー情報 */
    H   resv[6];
}   DEV_SPEC;

CSPEC, DEV_SPEC の詳細はBTRON3仕様書 「第2編2.2.4 描画環境」 を参照すること。

ここでは、2つのカラー情報間での色変換のライブラリを提供する。

SetDevCSPEC
 
DEV_SPECからCPSECを設定

【形式】

ERR SetDevCSPEC( CPSEC *cs, DEV_SPEC *ds, COLOR *colmap )

【パラメータ】

CSPEC    *cs      設定先 CSPEC
DEV_SPEC *ds      DEV_SPEC データ
COLOR    *colmap  カラーマップ

【リターン値】

≧ 0    正常
< 0    エラー(エラーコード)

【解説】

ds および colmap で示すデバイスのカラー環境を cs に設定する。

colmap で示されるカラーマップは、 そのまま cs->colmap に設定されるので、 colmap のメモリは、cs の使用が終わるまで解放してはいけない。

カラーマップ方式でない場合は、colmap = NULL とする。

SetImageCSPEC
 
画像セグメントからCSPEC設定

【形式】

ERR SetImageCSPEC(CSPEC *cs, UH attr, UH info[4], COLOR *colmap)

【パラメータ】

CSPEC   *cs     設定先 CSPEC
UH      attr    カラー属性(IMAGESEG.color を設定)
UH      info[4] カラー情報(IMAGESEG.cinfo[4] を設定)
COLOR   *colmap IMAGESEG から取り出したカラーマップ

【リターン値】

≧0    正常
<0    エラー(エラーコード)

【解説】

画像セグメントの色情報から CSPEC を設定する。

toRGB
 
ピクセル値をRGBに変換

【形式】

COLOR   toRGB(COLOR pix, CSPEC *cspec)

【パラメータ】

COLOR   pix 変換するピクセル値
CSPEC   *cspec  CSPEC 情報

【リターン値】

RGB値

【解説】

cspec で指定された環境での pix で指定した色 ( ピクセル値 ) をRGB値に変換して返す。

toPixel
 
RGB値をピクセル値に変換

【形式】

COLOR   toPixel(COLOR rgb, CSPEC *cspec)

【パラメータ】

COLOR   rgb 変換する RGB 値
CSPEC   *cspec  CSPEC 情報

【リターン値】

ピクセル値

【解説】

cspec で指定された環境で、 rgb で指定した色 ( RGB 値 ) に最も近い色を選び、そのピクセル値を返す。

NearestColor
 
最も近い色に変換

【形式】

COLOR   NearestColor(COLOR rgb, CSPEC *cspec)

【パラメータ】

COLOR   rgb rgb値
CSPEC   *cspec  CSPEC情報

【リターン値】

RGB値

【解説】

rgb で指定した色 ( RGB 値 ) を cspec で指定された環境で表現できる最も近い色に変換し、 その色を RGB 値で返す。

OperateColor
 
色の演算

【形式】

COLOR   OperateColor(COLOR col, CSPEC *cspec, ColorOpe ope, ...)

【パラメータ】

COLOR    col     元の色
CSPEC   *cspec  CSPEC情報
ColorOpe ope    演算指定

【リターン値】

演算結果の色(ピクセル値)

【解説】

cspec で指定された環境で、col で指定した色を ope で指定した方法で演算し、 結果の色(ピクセル値)を返す。
ope の種類によってはオプションの引数がある。

□ 色演算方法

typedef enum {
    CO_Reverse      /* 色反転:オプション無し */
} ColorOpe;
InitConvColor
 
高速色変換の初期設定

【形式】

ERR InitConvColor(CNVCOL *cp, CSPEC *dst, CSPEC *src, CSPEC *env)

【パラメータ】

CNVCOL  *cp     設定値
CSPEC   *dst    変換先の色環境
CSPEC   *src    変換元の色環境
CSPEC   *env    != NULL のときenv の色環境で表現できる色へ減色が行われる。

【リターン値】

≧0    正常
<0    エラー(エラーコード)

【解説】

src の色環境から dst の色環境へ変換するための初期設定を行う。

env != NULL の場合は、env の色環境で表現できる色へ減色が行われる。 src, dst および env ( これらに含まれるカラーマップも含めて ) は、色変換中に参照されるので、EndConvColor() を呼び出すまでは変更せずに保持していなければならない。
cp に色変換に必要な情報を設定して返すので、以後の色変換の時にそのまま指定する。

□ 色変換情報

typedef struct {
    CSPEC   *src;           /* 変換元の色環境 */
    CSPEC   *dst;           /* 変換先の色環境 */
    CSPEC   *env;           /* 減色する色環境 (NULL の時減色しない) */
    W       max_pix;        /* src の色環境の色数 */
    COLOR   *hash;          /* 高速変換用テーブル */
} CNVCOL;
ConvColor
 
高速色変換

【形式】

COLOR   ConvColor(CNVCOL *cp, COLOR pix)

【パラメータ】

CNVCOL  *cp 色変換情報
COLOR   pix 変換する色(ピクセル値)

【リターン値】

変換結果のピクセル値

【解説】

pix で指定した色 ( ピクセル値 ) を変換して、 変換結果の色 ( ピクセル値 ) を返す。

EndConvColor
 
高速色変換の終了

【形式】

void    EndConvColor(CNVCOL *cp)

【パラメータ】

CNVCOL  *cp 色変換情報

【リターン値】

なし

【解説】

高速色変換を終了する。

ConvColorBmp
 
ビットマップの色と形式変換


【形式】

ERR ConvColorBmp(BMP *dst, CSPEC *dspc, BMP *src, CSPEC *sspc, CSPEC *env)

【パラメータ】

BMP     *dst    変換先のビットマップ
CSPEC   *dspc   変換先の色情報
BMP     *src    変換元のビットマップ
CSPEC   *sspc   変換元の色情報
CPSEC   *env    減色情報

【リターン値】

≧0    正常
<0    エラー(エラーコード)

【解説】

sspc の色環境で表わされる src のビットマップデータを、 色及び形式変換して dspc の色環境で表わされる dst のビットマップに書き込む。

env != NULL の場合は、env の色環境で表現できる色へ減色が行われる。 srcdst の大きさ ( bounds で表わされる幅と高さ ) は、 同じでなければならない ( 拡大 / 縮小は行われない )。 src == dst であってもよい。 dst の必要なメモリ領域は、 あらかじめ確保しておくこと。

InitOpeColor
 
高速色演算の初期設定

【形式】

ERR InitOpeColor(OPECOL *op, CSPEC *env, ColorOpe ope, ...)

【パラメータ】

OPECOL  *op     設定値格納場所
CSPEC   *env    色環境
ColorOpe ope    色演算指定

【リターン値】

≧0    正常
<0    エラー(エラーコード)

【解説】

env の色環境下で ope の演算を行うための初期設定を行う。 ope の種類によってはオプションの引数がある。

env (これに含まれるカラーマップも含めて)は、 色演算中に参照されるので、EndOpeColor() を呼び出すまでは変更せずに保持していなければならない。 op に色演算に必要な情報を設定して返すので、 以後の色演算の時にそのまま指定する。

□ 色演算情報

typedef struct {
    CSPEC       *env;       /* 演算対象の色環境 */
    ColorOpe    ope;        /* 演算方法 */
    W           max_pix;    /* env の色環境の色数 */
    COLOR       *hash;      /* 高速変換用テーブル */
} OPECOL;
OpeColor
 
高速色演算


【形式】

COLOR   OpeColor(OPECOL *op, COLOR pix)

【パラメータ】

OPECOL  *op 色演算情報
COLOR   pix 元のピクセル値

【リターン値】

演算後のピクセル値

【解説】

pix で指定した色 ( ピクセル値 ) を演算して、 結果の色 ( ピクセル値 ) を返す。

EndOpeColor
 
高速色演算の終了

【形式】

void    EndOpeColor(OPECOL *op)

【パラメータ】

OPECOL  *op 色演算情報

【リターン値】

なし

【解説】

高速色演算を終了する。

OpeColorBmp
 
ビットマップの色演算

【形式】

ERR OpeColorBmp(BMP *dst, BMP *src, CSPEC *env, ColorOpe ope, ...)

【パラメータ】

BMP     *dst    変換先のビットマップ
BMP     *src    変換元のビットマップ
CPSEC   *env    色環境情報
ColorOpe ope    演算指定

【リターン値】

≧0    正常
<0    エラー(エラーコード)

【解説】

env で指定された環境下で、 src の全てのピクセルの色を ope で指定した方法で演算し、 結果を dstへ書き込む。

srcdst は同じ大きさ・形式でなければならない。 src == dst であってもよい。 dst の必要なメモリ領域は、 あらかじめ確保しておくこと。 opeの種類によってはオプションの引数がある。

RGBtoHLS
 
RGBからHLSへの変換

【形式】

UW  RGBtoHLS(UW rgb)

【パラメータ】

UW  rgb RGBカラー表現: xx RR GG BB  (R,G,B: 0〜255)

【リターン値】

UW      HLSカラー表現: xx HH LL SS  (H:0〜239, L:0〜240, S:0〜240)

【解説】

RGB 表現 ( R,G,B: 0〜255 ) の値を HLS 表現 ( H:0〜239, L:0〜240, S:0〜240 ) の値に変換する。

HLStoRGB
 
HLSからRGBへの変換

【形式】

UW  HLStoRGB(UW hls)

【パラメータ】

UW  hls HLSカラー表現: xx HH LL SS  (H:0〜239, L:0〜240, S:0〜240)

【リターン値】

UW      RGBカラー表現: xx RR GG BB  (R,G,B: 0〜255)

【解説】

RGB表現 ( R,G,B: 0〜255 ) の値を HLS 表現 (H:0〜239, L:0〜240, S:0〜240) の値に変換する。

toStdRGBColor
 
ピクセル値からRGBカラーへの強制変換

【形式】

COLOR   toStdRGBColor(COLOR pix)

【パラメータ】

COLOR pix   ピクセル値表現のカラー

【リターン値】

COLOR       RGB表現のカラー

【解説】

カラー仕様が不明な状況でのピクセル値 ( 16 色 or 256 色 ) を標準の RGB カラー値に強制的に変換する。
この関数を使用するには、データボックスを利用できる環境でなければならない ( システムデータボックスがオープンされていなければならない )。

GetStdCSPEC
 
システム標準CSPECの取り出し

【形式】

ERR GetStdCSPEC(CSPEC *cs, W planes, UW pixbits)

【パラメータ】

CSPEC *cs       取り出したシステム標準CSPECの格納領域
W     planes    検索情報:対象とするBMPのプレーン数
UW    pixbits   検索対象:ピクセルビット数

【リターン値】

ER_OK       正常終了
ER_NOEXS    カラー情報は見つからなかった

【解説】

引数で指定したプレーン数、 ピクセルビット数からシステム標準のカラー情報を取り出す。

システム標準のカラー形式とは、 システムの SCREEN 上で色変換なしに表示できる可能性のあるカラー情報の集合あり、 ピクセル数、プレーン数が一致するものが取り出されることになる。

取り出したカラー情報がカラーマップ形式であった場合、 カラーマップ本体はデータボックスの共有領域に存在するため、 上書きしてはならない。 この関数を使用するには、 データボックスを利用できる環境でなければならない ( システムデータボックスがオープンされていなければならない )。

p
この章の目次にもどる
前頁:2.14 エンディアン変換にもどる
次頁:2.16 付箋固有データ処理にすすむ