この章の目次にもどる
前頁:2.14 エンディアン変換にもどる
次頁:2.16 付箋固有データ処理にすすむ
□ カラー情報
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
を設定する。
【形式】
COLOR toRGB(COLOR pix, CSPEC *cspec)
【パラメータ】
COLOR pix 変換するピクセル値
CSPEC *cspec CSPEC 情報
【リターン値】
RGB値
【解説】
cspec
で指定された環境での pix
で指定した色
( ピクセル値 ) をRGB値に変換して返す。
【形式】
COLOR toPixel(COLOR rgb, CSPEC *cspec)
【パラメータ】
COLOR rgb 変換する RGB 値
CSPEC *cspec CSPEC 情報
【リターン値】
ピクセル値
【解説】
cspec
で指定された環境で、 rgb
で指定した色 ( RGB 値 ) に最も近い色を選び、そのピクセル値を返す。
【形式】
COLOR NearestColor(COLOR rgb, CSPEC *cspec)
【パラメータ】
COLOR rgb rgb値
CSPEC *cspec CSPEC情報
【リターン値】
RGB値
【解説】
rgb
で指定した色 ( RGB 値 ) を cspec
で指定された環境で表現できる最も近い色に変換し、
その色を RGB 値で返す。
【形式】
COLOR OperateColor(COLOR col, CSPEC *cspec, ColorOpe ope, ...)
【パラメータ】
COLOR col 元の色
CSPEC *cspec CSPEC情報
ColorOpe ope 演算指定
【リターン値】
演算結果の色(ピクセル値)
【解説】
cspec
で指定された環境で、col
で指定した色を ope
で指定した方法で演算し、
結果の色(ピクセル値)を返す。
ope
の種類によってはオプションの引数がある。
□ 色演算方法
typedef enum {
CO_Reverse /* 色反転:オプション無し */
} ColorOpe;
【形式】
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;
【形式】
COLOR ConvColor(CNVCOL *cp, COLOR pix)
【パラメータ】
CNVCOL *cp 色変換情報
COLOR pix 変換する色(ピクセル値)
【リターン値】
変換結果のピクセル値
【解説】
pix
で指定した色 ( ピクセル値 ) を変換して、
変換結果の色 ( ピクセル値 ) を返す。
【形式】
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
の色環境で表現できる色へ減色が行われる。
src
と dst
の大きさ
( bounds
で表わされる幅と高さ ) は、
同じでなければならない ( 拡大 / 縮小は行われない )。
src == dst
であってもよい。
dst
の必要なメモリ領域は、
あらかじめ確保しておくこと。
-
src
, dst
の境界ビット数が 1,2,4,8,16,32
のいずれかの場合のみ変換可能であり、
8,16,32 の場合は BMP のプレーン数は 1 でなければならない。
【形式】
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;
【形式】
COLOR OpeColor(OPECOL *op, COLOR pix)
【パラメータ】
OPECOL *op 色演算情報
COLOR pix 元のピクセル値
【リターン値】
演算後のピクセル値
【解説】
pix
で指定した色 ( ピクセル値 ) を演算して、
結果の色 ( ピクセル値 ) を返す。
【形式】
void EndOpeColor(OPECOL *op)
【パラメータ】
OPECOL *op 色演算情報
【リターン値】
なし
【解説】
高速色演算を終了する。
【形式】
ERR OpeColorBmp(BMP *dst, BMP *src, CSPEC *env, ColorOpe ope, ...)
【パラメータ】
BMP *dst 変換先のビットマップ
BMP *src 変換元のビットマップ
CPSEC *env 色環境情報
ColorOpe ope 演算指定
【リターン値】
≧0 正常
<0 エラー(エラーコード)
【解説】
env
で指定された環境下で、
src
の全てのピクセルの色を
ope
で指定した方法で演算し、
結果を dst
へ書き込む。
src
と dst
は同じ大きさ・形式でなければならない。
src == dst
であってもよい。
dst
の必要なメモリ領域は、
あらかじめ確保しておくこと。
ope
の種類によってはオプションの引数がある。
src
, dst
の境界ビット数が
1,2,4,8,16,32 のいずれかの場合のみ変換可能であり、
8,16,32の場合は BMP のプレーン数は 1 でなければならない。
【形式】
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 ) の値に変換する。
【形式】
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 付箋固有データ処理にすすむ