関数リファレンス
目次
30.全体に関するもの
31.イメージウィンドウ関連
32.グラフィックス描画関連
33.テキスト描画
34.画像ファイル関連
35.テキストウィンドウ関連
36.テキスト入出力
37.色変換
38.文字コード変換
39.インプットボックス関連
40.ボタンボックス操作
41.内部変数
1〜15 はじめに,使用手順 等
16〜29 サンプルプログラム
42 バージョンアップ履歴
43〜46 著作権・使用許諾,作者への連絡先 等
全体に関するもの
void ESP_Ready(void);
説明
この関数はユーザ側で用意してください.内容は空でも構いません.
この関数は,プログラムが実行された最初に1度だけ呼び出されます.イメージウィンドウの生成,画像入力ボードの初期化など最初に1度だけ必要な作業はこの中に記述すると便利です.
void ESP_Main(void);
説明
この関数はユーザ側で用意してください.内容は空でも構いません.
この関数は,Start メニュー(または Sキー)が押される毎に呼び出されます.何度でも呼び出される可能性があることを意識してプログラムを記述するのが正しい姿勢です.
void ESP_Finish(void);
説明
この関数はユーザ側で用意してください.内容は空でも構いません.
この関数は Exit メニュー(またはXキー,ESCキー)が押された後,ESPLIB が終了する直前に 1度だけ呼び出されます.表示や描画に関連したプログラムを書いても,ほとんど目に入ることがないので意味がないでしょう.画像入力ボードの解放処理などが必要なときに,その処理をこの関数の中で行えばよいでしょう.
int random(int n);
説明
0 から (n-1) の範囲で,乱数を発生させます.
引数
n:上限値+1(有効最大値 32767[=0x7fff])
戻り値
0〜(n-1) の間の乱数
int ESP_Pause(const char *msg);
説明
メッセージボックスを表示します.
OKボタンかCANCELボタンを選択すると処理が続行します.
引数
msg:メッセージボックス内に表示するテキストへのポインタ
使用例
ESP_Pause("Press Enter key");
戻り値
0:OKボタンが選択された
1:CANCELボタンが選択された
void ESP_PlaceMain(int x, int y);
説明
メインウィンドウを指定した位置へ移動させます.
引数
x,y:新しい位置の左上座標
使用例
ESP_PlaceMain(500,350);
void ESP_SetForeground(int i);
説明
指定したウィンドウをアクティブ(最前面)にします.
引数
i:イメージウィンドウの番号[0〜255]
テキストウィンドウの番号[ESPTWBASE+0〜ESPTWBASE+255]
メインウィンドウ[ESPMAINWINDOW]
インプットボックス[ESPINPUTBOX]
ボタンボックス[ESPBUTTONBOX]
使用例
ESP_SetForeground(ESPMAINWINDOW);
ESP_SetForeground(ESPTWBASE+3);
int ESP_GetForeground(void);
説明
現在,アクティブ(最前面)になっているウィンドウを調べます.
戻り値
0〜255:イメージウィンドウの番号
ESPTWBASE+0〜ESPTWBASE+255:テキストウィンドウ
ESPMAINWINDOW:メインウィンドウ
ESPINPUTBOX:インプットボックス
ESPBUTTONBOX:ボタンボックス
-1:その他のウィンドウ
使用例
int i;
i=ESP_GetForeground();
int ESP_START;
説明
この変数の値は最初 0 ですが,Start メニュー(またはSキー)が押されたとき 1 になります.
ESP_Ready()関数の中で,この変数に0以外の値を代入しておけば,
ESP_Ready()の実行が終わった後,ESP_Main()を自動的に実行させることができます.
戻り値
0:Startメニュー(またはSキー)は押されていない
1:Startメニュー(またはSキー)が押された
使用例
void ESP_Ready(void)
{
ESP_START=1;
}
void ESP_Main(void)
{
//Startメニューが押されなくても,自動的にこの関数ESP_Main()が実行される.
}
int ESP_STOP;
説明
この変数の値は通常は 0 ですが,Stop メニュー(またはCキー)が押されると 1 になります.
値の代入はできません.
内部作業としては,たまっているメッセージ処理も行います.
戻り値
0:Stopメニュー(またはCキー)は押されていない
1:Stopメニュー(またはCキー)が押された
使用例
for(i=0; i<480; i++){
ESP_Line(0,i,639,i,0xffffff);
ESP_Update();
if(ESP_STOP) break;
}
double ESP_PI;
説明
円周率πの値を保持しています.
使用例
double ang;
ang=ESP_PI/2.0;
double DEG2RAD(double deg);
double RAD2DEG(double rad);
説明
角度の単位換算(degree <--> radian)を行うマクロです.
引数
deg:角度(°単位)
rad:角度(ラジアン単位)
使用例
double thdeg, thrad;
thrad=DEG2RAD(30);
thdeg=RAD2DEG(ESP_PI/2.0);
int Limit(int min, int value, int max);
説明
引数min,maxで制限されたvalueの値を返します.
引数
min:最小値
value:中間値
max:最大値
戻り値
value が min より小さければ min を,value が max より大きければ max を,それ以外は value を返します.
使用例
int r;
r=Limit(0,r,255);
void ESP_Start(int mw_show=0);
説明
ライブラリモードでのみ使用できます.ESPLIBの使用を開始します.
ライブラリモードでは最初に必ず呼び出してください.
なお,ESPLIBの使用を終了するには,ESP_Exit()を使います.
引数
mw_show:0または引数省略のとき,メインウィンドウは表示されません.
1のとき,メインウィンドウを表示します.
使用例
ESP_Start();
void ESP_Exit(void);
説明
ESPLIBへ終了指示を出します.
この関数を呼び出した後,ESP_Main() 関数から出ることにより,プログラムを終了させることができます.ESPLIB のメインウィンドウにおいてExitメニュー(またはXキー,ESCキー)を押したのと同じ効果があります.
ESP_Main() 関数内でユーザプログラムが走っていて,2秒以上待っても処理が終了しない場合,その処理は強制的に終了させられます.
ESP_Exit() を呼び出すだけでなく,呼び出した後 ESP_Main() 関数から return するようにして下さい.
ライブラリモードではアプリケーションを終了させる前に必ずこの関数でESPLIBを終了させてください.ライブラリモードでも,メインウィンドウのExitメニュー(またはXキー,ESCキー)を押したのと同じ効果がありますので,開かれているウィンドウ等は閉じられることになります.
使用例(アプリケーションモード)
void ESP_Main(void)
{
・・・中略・・・
if(a==255){
ESP_Exit();
return;
}
}
使用例(ライブラリモード)
ESP_Start();
//ここに何か書く
ESP_Exit();
int ESP_GetOpenFileName(char *file, const char *title=NULL, const char
*path=NULL);
int ESP_GetSaveFileName(char *file, const char *title=NULL, const char
*path=NULL);
説明
ファイルを開く/保存するためのコモンダイアログボックスを開きます.
ユーザがファイルを指定した後,その指定されたファイル名を file に格納します.
引数
file:ファイル名を格納するための文字列バッファの先頭アドレス
title:コモンダイアログボックスに表示するタイトルを指定します.
NULL指定時または引数省略時は,デフォルトのタイトルが表示されます.
path:最初に表示されるディレクトリを指定します.
NULL指定時または引数省略時は,カレントディレクトリが表示されます.
戻り値
0:正常終了(ファイルが指定された)
1:キャンセル,クローズされた(このときファイル名には""が格納されます)
使用例
char file1[256],file2[256];
ESP_GetOpenFileName(file1,"Select image file","d:\\bmp");
ESP_GetSaveFileName(file2);
void ESP_ResetClock(void);
void ESP_StartClock(void);
void ESP_StopClock(void);
int ESP_DispClock(void);
int ESP_GetClock(void);
double ESP_GetClockms(void);
説明
時間計測を行うための関数です.ESP_StartClock() が呼び出されてからの時間を計測します.
ESP_ResetClock() は計測値を 0 へ戻します.
ESP_StartClock() は内部のストップウォッチを開始(再開)します.ESPLIB開始時にすでに実行されています.
ESP_StopClock() はストップウォッチを(一時)停止させます.
ESP_DispClock() は計測時間をメッセージボックスにより表示した後,OKボタンが押されると計測値をms(ミリ秒)単位で返します.
ESP_GetClock()は,表示は行わず,計測時間をms(ミリ秒)単位で返します.戻り値は整数型です.
ESP_GetClockms()は,表示は行わず,計測時間をms(ミリ秒)単位で返します.戻り値はミリ秒単位ですが,実数型なので1ms未満の精密な計測ができます.
戻り値
計測された時間
使用例
int t0=ESP_GetClock();
for(int i=0;i<10;i++){
ESP_Line(0,i,9-i,0,0xffffff);
ESP_Update();
}
int dt=ESP_GetClock()-t0;
ESP_Printf("Time=%d[ms]\n",dt);
int ESP_MOUSE;
説明
ESP_Ready() や ESP_Main() 内などで ESP_MOUSE の値を 1 にすると,それ以降,マウスやキーボードの状態がリアルタイムで下記変数に格納されます.ESPLIB が起動した時,この値は 0 です.
情報が格納されるグローバル変数
int ESP_MW:現在マウスカーソルがあるイメージウィンドウの番号
[0〜255, -1(イメージウィンドウ以外)]
int ESP_MX:現在マウスカーソルがあるウィンドウでのX座標
(現在の表示倍率を考慮した値)
int ESP_MY:現在マウスカーソルがあるウィンドウでのY座標
(現在の表示倍率を考慮した値)
int ESP_ML:左ボタンの状態 [0:押されていない 0以外:押されている]
int ESP_MM:中ボタンの状態 [0:押されていない 0以外:押されている]
int ESP_CTRL:Ctrlキーの状態 [0:押されていない 0以外:押されている]
int ESP_SHIFT:Shiftキーの状態 [0:押されていない 0以外:押されている]
void CM(void);
説明
ESP_Main()等の中でプログラムが最高速度で実行される場合,ボタンやメニュー等の反応が鈍くなったりします.そのような場合,この関数を使うことでそれらの反応が良くなる場合があります.Windowsの内部でたまっているメッセージを処理する関数です.
この関数は,これまのバージョンでも存在しており,非公開だったものが公開になっただけです.従来も,ESP_STOPの呼び出し等で,CM()は自動的に実行されていました.
使用例
for(i=0;i<100000;i++){
ESP_Line(0,0,100,75,0xff0000);
ESP_Update();
CM();
}
int ESP_Sleep(int msec);
説明
指定時間だけ待ちます.
Win32 API にある Sleep() 関数と違って,待っている間も ESPLIB のボタンやメニュー選択が妨げられません.
Stopメニュー(あるいはCキー)が選択された時は,即座に制御が戻ります.
引数
msec:時間(単位:ミリ秒)
戻り値
0:正常終了
1:Stopメニューが押された.
使用例
ESP_Sleep(1000);
イメージウィンドウ関連
int ESP_CreateImage(int i, const char *title, int x0, int y0, int wx, int
wy, int zoom);
int ESP_CreateImage8(int i, const char *title, int x0, int y0, int wx,
int wy, int zoom);
説明
イメージウィンドウを新規に開きます.
32ビットモードで開くには ESP_CreateImage() を,8ビットモードで開くには ESP_CreateImage8() を使います.
開かれたウィンドウは選択状態になります.すなわち,この関数が成功した場合,ESP_Select()が1回実行された状態になっています.
8ビットモードのイメージウィンドウにおけるカラーテーブルの初期値はグレースケールです.すなわち,0〜255のカラーコードが黒〜白に対応しており,濃淡画像を表示するのに適したパレット設定になっています.このカラーテーブルを取得/設定する関数は ESP_GetColorTable() / ESP_SetColorTable() です.
8ビットモードのイメージウィンドウに対して描画関数を使用する場合,色情報(0xrrggbb)のうち下位8ビットのみが色コード(あるいは輝度値)として適用されます.
引数
i:イメージウィンドウの番号[0〜255]
title:タイトル文字列へのポインタ(ウィンドウの上部に表示されます)
x0, y0:ウインドウ表示左上座標
wx,wy:イメージの幅および高さ(1以上の値が有効です)
(少ないメモリのマシンで大きな画像を扱う場合,
スワップ発生によって動作が遅くなる場合があります)
zoom:表示倍率(単位:%)
(ただし,デスクトップの大きさを超えるウィンドウサイズにはできません)
(デスクトップの大きさ以上の表示が必要な場合にはESP_CreateImageFL()等を使用してください)
戻り値
0:正常終了
1:番号 i のイメージウィンドウはすでに存在する
2:画像サイズが大きすぎる
3:データ格納領域の確保に失敗
4:引数 i が範囲外
使用例
ESP_CreateImage(0,"Image A",0,0,320,240,100);
ESP_CreateImage8(4,"Output",-1,-1,640,480,50);
int ESP_CreateImageFL(int i, const char *title, int x0, int y0, int wx,
int wy, int zoom);
int ESP_CreateImage8FL(int i, const char *title, int x0, int y0, int wx,
int wy, int zoom);
説明
枠のない(frameless)イメージウィンドウを新規に開きます.
32ビットモードで開くには ESP_CreateImageFL() を,8ビットモードで開くには ESP_CreateImage8FL()
を使います.
zoomによって決まる最終的なウィンドウサイズの制限がデスクトップの大きさの2倍までに緩和されている点がESP_CreateImage(),ESP_CreateImage8()と異なります.デスクトップ全域を完全に覆うような表示も可能です.
ただし,この関数で作成されたイメージウィンドウには枠がないため,マウスでドラッグしての移動はできません.
これ以外のことはESP_CreateImage()と同じなのでそちらの説明を参照してください.
引数
i:イメージウィンドウの番号[0〜255]
title:タイトル文字列へのポインタ(ウィンドウの上部に表示されます)
x0,y0:ウインドウ表示左上座標(-1を指定するとおまかせモードになります)
wx,wy:イメージの幅および高さ(1以上の値が有効です)
(少ないメモリのマシンで大きな画像を扱う場合,
スワップ発生によって動作が遅くなる場合があります)
zoom:表示倍率(単位:%)
戻り値
0:正常終了
1:番号 i のイメージウィンドウはすでに存在する
2:画像サイズが大きすぎる
3:データ格納領域の確保に失敗
4:引数 i が範囲外
使用例
ESP_CreateImageFL(0,"Image",-45,0,640,480,214);
ESP_CreateImage8FL(1,"Output",0,0,320,240,100);
int ESP_Select(int i);
説明
描画対象となるイメージウィンドウを選択します.
ESPLIB のすべての描画関数は,この関数によって選択されているイメージウィンドウへのみ描画します.
現在の選択値はスタック構造(8段)の履歴バッファに保存されます.ESP_UnSelect() により過去の選択に戻すことができます.
ESP_CreateImage()やESP_CreateImage8()が成功した場合,ESP_Select()が1回実行された状態になっています.
番号 i のイメージウィンドウが存在しない場合,この関数は無視されます.
引数
i:イメージウィンドウの番号[0〜255]
戻り値
0:正常終了
1:引数 i が範囲外または番号 i のイメージウィンドウが存在しない
使用例
ESP_CreateImage(0,"Image A",0, 0,320,240,50);
ESP_CreateImage(1,"Image B",0,300,320,240,50);
ESP_Select(0);
ESP_Line(0,0,40,50,RGB2C(255,127,63));
ESP_Update();
int ESP_UnSelect(void);
説明
イメージウィンドウの選択を1つ前の状態に戻します.
ESP_Select() によって保存された履歴バッファの情報を利用します.履歴バッファはスタック構造(8段)となっており,この関数を実行することにより,履歴バッファ内の情報は新しい方へ1つずつ移動します.
戻り値
0:正常終了
1:1つ前の番号のイメージウィンドウを選択できない
使用例
ESP_CreateImage(0,"Image A",0, 0,320,240,50);
ESP_CreateImage(1,"Image B",0,300,320,240,50);
ESP_Line(0,0,40,50,RGB2C(255,127,63)); //for Image B
ESP_UnSelect();
ESP_Line(0,0,10,20,0xff0000); //for Image A
int ESP_Update(void);
説明
内容を更新します.
選択状態にあるイメージウィンドウに対して有効です.
ESPLIB は描画を高速に処理するために,描画関数の呼び出し毎に画面の更新を行いません.
一連の描画関数を呼び出した後,この関数を呼び出すことによって初めて変化が見えることになります.
戻り値
0:正常終了
1:引数 i が範囲外または番号 i のイメージウィンドウが存在しない
使用例
ESP_CreateImage(0,"Image A",0,0,320,240,150);
ESP_Line(0,0,40,50,RGB2C(255,127,63));
ESP_Update();
int ESP_Update_(int i);
説明
指定された番号のイメージウィンドウの内容を更新します.
その他のことについては,ESP_Update() を参考にしてください.
引数
i:イメージウィンドウの番号[0〜255]
戻り値
0:正常終了
1:引数 i が範囲外または番号 i のイメージウィンドウが存在しない
使用例
ESP_Update_(2);
void ESP_UpdateAll(void);
説明
開かれているすべてのイメージウィンドウの内容を更新します.
選択状態ではないイメージウィンドウも更新の対象となります.その他のことは,ESP_Update() を参考にしてください.
使用例
ESP_UpdateAll();
int ESP_ResizeImage(int i, int wx, int wy);
説明
イメージウィンドウのサイズを変更します.
画像情報は黒(ゼロ)に初期化されます.ウィンドウのタイトルは変更されません.表示倍率も可能な限り保たれます.
番号 i のイメージウィンドウが存在しない場合,この関数は無視されます.
引数
i:イメージウィンドウの番号[0〜255]
wx,wy:画像の幅および高さ(1以上の値が有効です)
戻り値
0:正常終了
1:引数 i が範囲外または番号 i のイメージウィンドウが存在しない
2:画像サイズが大きすぎる
3:データ記憶領域が確保できなかった
使用例
ESP_CreateImage(0,"Image A",0,0,320,240,100);
ESP_ResizeImage(0,640,480);
int ESP_DestroyImage(int i);
説明
イメージウィンドウを消滅させます.
番号 i のイメージウィンドウが存在しない場合,この関数は無視されます.
引数
i:イメージウィンドウの番号[0〜255]
戻り値
0:正常終了
1:ウィンドウ番号が範囲外または番号 i のイメージウィンドウは存在しない
使用例
ESP_CreateImage(0,"Image A",0,0,320,240,100);
ESP_DestroyImage(0);
ESP_CreateImage(0,"Image 1",50,40,300,200,50);
int ESP_PlaceImage(int i, int x, int y);
説明
イメージウィンドウの位置を変更します.
引数
i:イメージウィンドウの番号[0〜255]
x,y:新しい位置の左上座標
戻り値
0:正常終了
1:引数 i が範囲外または番号 i のイメージウィンドウが存在しない
使用例
ESP_CreateImage(0,"Image A",0,0,320,240,100);
ESP_PlaceImage(0,100,50);
int ESP_ZoomImage(int i, int zoom);
説明
表示倍率を変更します.
扱っている画像データが拡大縮小されることはありません.表示時の大きさが変わるのみです.
番号 i のイメージウィンドウが存在しない場合,この関数は無視されます.
倍率はデスクトップの解像度の限界のため,指定した倍率に設定されない場合があります.その場合,倍率は制約の範囲内で自動調節されます.
引数
i:イメージウィンドウの番号[0〜255]
zoom:表示倍率(単位:%)
戻り値
0:正常終了
1:引数 i が範囲外または番号 i のイメージウィンドウが存在しない
2:画像サイズが大きすぎる
使用例
ESP_ZoomImage(0,140);
int ESP_GetPoint(int i, int *x, int *y);
int ESP_GetPointH(int i, int *x, int *y);
int ESP_GetPointV(int i, int *x, int *y);
int ESP_GetPointR(int i, int *x, int *y, int wx, int wy);
int ESP_GetRect(int i, int *x1, int *y1, int *x2, int *y2);
int ESP_GetRectL(int i, int *x1, int *y1, int *x2, int *y2);
int ESP_GetRectL2(int i, int x0, int y0, int *x, int *y);
int ESP_GetRectC(int i, int *x, int *y, int *r);
説明
マウスの左クリック1回(関数によっては2回)を要求し,その座標を変数に格納します.
最後のクリック時にShiftキーが押されていた場合,ESP_SHIFT の値が 1 になります.
クリックを要求している間,関数の種類に応じて以下の反転したグラフィックが描画されます.
ESP_GetPoint(クリック1回)...何も表示されません.
ESP_GetPointH(クリック1回)...反転水平ライン
ESP_GetPointV(クリック1回)...反転垂直ライン
ESP_GetPointR(クリック1回)...マウスカーソルを中心とした指定サイズの反転ボックス
ESP_GetRect(クリック2回)...反転ボックス
ESP_GetRectL(クリック2回)...反転ライン
ESP_GetRectL2(クリック1回)...反転ライン
ESP_GetRectC(クリック2回)...反転サークル(円)
この関数を呼び出すと,クリック要求メッセージがメインウィンドウ上に表示されます.
番号 i のイメージウィンドウが存在しない場合,この関数は無視されます.
引数
i:イメージウィンドウの番号[0〜255]
x0,y0:反転ラインの開始点 [ESP_GetRectL2() のみ]
wx,wy:反転ボックスのサイズ [ESP_GetPointR() のみ]
格納情報
x,y:座標(ESP_GetPoint/ESP_GetPointH/ESP_GetPointV/ESP_GetPointR/ESP_GetRectC/ESP_GetRectL2)
x1,y1:座標(ESP_GetRect/ESP_GetRectL)
x2,y2:座標(ESP_GetRect/ESP_GetRectL)
r:半径(ESP_GetRectC)
戻り値
0:正常終了
1:キャンセルされた(右ボタンが押された)
2:ウィンドウ番号が不正
使用例
int x,y,x1,y1,x2,y2,r;
ESP_GetPoint(0,&x,&y);
ESP_GetPointH(1,&x,&y);
ESP_GetPointV(2,&x,&y);
ESP_GetPointR(3,&x,&y,40,30);
ESP_GetRect(0,&x1,&y1,&x2,&y2);
ESP_GetRectL(1,&x1,&y1,&x2,&y2);
ESP_GetRectL2(2,100,50,&x,&y);
ESP_GetRectC(3,&x,&y,&r);
int ESP_GetDisplayMode(int i);
説明
イメージウィンドウについて,表示倍率が100%以外のときの画像の表示方法に関する情報を取得します.
引数
i:イメージウィンドウの番号[0〜255]
戻り値
COLORONCOLOR:単純な間引きによる縮小,単純な引き延ばしによる拡大(イメージウィンドウが作成された直後は,この状態です)
HALFTONE:補間によるスムージングが施された拡大・縮小
0:引数 i が範囲外または番号 i のイメージウィンドウが存在しない
使用例
int mode;
mode=ESP_GetDisplayMode(1);
int ESP_SetDisplayMode(int i, int mode);
説明
表示倍率が100%以外のときの画像の表示方法を選択します.イメージウィンドウ毎に独立して設定できます.
イメージウィンドウのタイトル末尾に "*" が表示されているとき,HALFTONE状態であることを示します.
イメージウィンドウがアクティブのときに TAB キーを押すことによって表示方法を手動で切り替えることも可能です.
番号 i のイメージウィンドウが存在しない場合,この関数は無視されます.
引数
i:イメージウィンドウの番号[0〜255]
mode:次の2つの文字定数から1つを指定します.
COLORONCOLOR … 単純な間引きによる縮小,単純な引き延ばしによる拡大(イメージウィンドウが作成された直後は,この状態です)
HALFTONE … 補間によるスムージングが施された拡大・縮小表示 (ビデオカードの種類によっては機能しない場合もあります)
戻り値
0:正常終了
1:引数 i が範囲外または番号 i のイメージウィンドウが存在しない
使用例
ESP_SetDisplayMode(0,HALFTONE);
int ESP_CheckKeyDown(void);
説明
イメージウィンドウがアクティブ(最前面)のとき,押されたキーのコードを返します.
コード仕様はWindowsの仮想キーコードに準じます.
戻り値
仮想キーコード.ただし,押されていない場合,-1.
使用例
if (ESP_CheckKeyDown()==VK_NUMPAD1)...
グラフィックス描画関連
描画関数は選択状態にあるイメージウィンドウに対して有効です.
8ビットモードのイメージウィンドウに対して描画関数を使用する場合,色情報(0xrrggbb)のうち下位8ビットのみが色コード(あるいは輝度値)として適用されます.
下記の関数以外にも Arc, Polygon などのWin32 API描画関数がすべて使えます.このとき,デバイスコンテキストには内部変数
esp_iw[i].memdc を指定します.
void ESP_Cls(void);
説明
イメージウィンドウの内部を黒(0x000000)でクリアします.
使用例
ESP_Select(3);
ESP_Cls();
ESP_Update();
void ESP_Pset(int x, int y, int c);
void ESP_PsetR(int x, int y, int c);
void ESP_PsetG(int x, int y, int c);
void ESP_PsetB(int x, int y, int c);
void ESP_PsetRGB(int x, int y, int r, int g, int b);
void ESP_PsetF(int x, int y, int c);
void ESP_PsetF8(int x, int y, int c);
説明
点を指定色で描画します.
ESP_Pset(), ESP_PsetRGB() を呼び出した後は,ラストポジションLPが座標(x,y)へ更新されます.
ESP_PsetR(), ESP_PsetG(), ESP_PsetB() はそれぞれ R,G,Bプレーンのみ変更します.
ESP_PsetF()は座標の範囲チェックを省略した,32bitイメージウィンドウ専用高速版です.
ESP_PsetF8()は座標の範囲チェックを省略した,8bitイメージウィンドウ専用高速版です.
ESP_PsetF()/ESP_PsetF8()は処理が若干高速化されますが,範囲外の描画ではフリーズ/異常終了しますので自己責任で使用して下さい.
引数
x,y:座標
c:色 0xrrggbb [32bitイメージウィンドウにおけるESP_Pset()/ESP_PsetF()]
c:色(輝度) 0xdd [ESP_PsetR/G/B()/8bitイメージウィンドウにおけるESP_Pset()/ESP_PsetF8()]
r,g,b:色 0xrr,0xgg,0xbb [ESP_PsetRGB()]
使用例
ESP_Select(0);
for(i=0;i<100;i++){
ESP_Pset(i,i,0xff8800);
}
ESP_Update();
void ESP_PsetXOR(int x, int y);
説明
点を反転させます.
既に描画されている色と0xFFFFFFとの XOR演算 が行われます.
この関数を呼び出した後は,ラストポジションLPが座標(x,y)へ更新されます.
引数
x,y:座標
使用例
ESP_PsetXOR(20,45);
int ESP_Point(int x, int y);
int ESP_PointR(int x, int y);
int ESP_PointG(int x, int y);
int ESP_PointB(int x, int y);
説明
点の色情報を返します.
ESP_Point() は,RGB形式で返します.
ESP_PointR() は,赤(Red)成分を返します.
ESP_PointG() は,緑(Green)成分を返します.
ESP_PointB() は,青(Blue)成分を返します.
引数
x,y:座標
戻り値
0xrrggbb [ESP_Point]
0xdd [ESP_PointR/ESP_PointG/ESP_PointB]
使用例
int c;
c=ESP_Point(40,30);
int ESP_PointBLI(double x, double y);
説明
点の色情報を返します.
ESP_Point() と異なるのは,座標の指定がdouble型となっており,実数座標における色を双線形補間(Bi-linear interpolation)により周囲4点の色情報を基にして求めている点です.
実行速度に関しては,ESP_Point() の方が高速です.
R,G,Bの各プレーンについて独立に補間演算をしています.
引数
x,y:座標
戻り値
0xrrggbb
使用例
int c;
c=ESP_PointBLI(37.4133, 81.07);
int ESP_PointBCI(double x, double y);
説明
指定された点の色情報を「3次畳み込み内挿法」(別名:双3次補間/Bicubic interpolation)により補間して返します.
実行速度に関しては,ESP_Point() の方が高速です.
R,G,Bの各プレーンについて独立に補間演算をしています.
引数
x,y:座標
戻り値
0xrrggbb
使用例
int c;
c=ESP_PointBCI(37.4133, 81.07);
int ESP_PointZoom(double x, double y, double zx, double zy);
説明
実数座標(x,y)を中心とした幅(zx,zy)の領域の平均的な色を返します.用途は画像縮小等です.内部ではバイリニア補間を使用しています.実行速度に関しては,ESP_Point() や ESP_PointBLI() の方が高速です.R,G,Bの各プレーンについて独立に補間演算をしています.
引数
x,y:注目する座標
zx,zy:平均をとるピクセル幅(範囲:1.0~3.0)
戻り値
0xrrggbb
使用例
int c;
c=ESP_PointZoom(20.23, 54.54, 2.25, 3.0);
void ESP_GetLine(void *buf, int x0, int y0, int wx);
説明
水平1ライン分の色情報をイメージウィンドウからメモリ領域にコピーします.
ラインの開始点は(x0,y0),終止点は(x0+wx-1,y0)です.
引数
buf:色情報の格納先(先頭アドレス)
必要な領域のサイズ:wx*4 バイト(32ビットモード), wx バイト(8ビットモード)
x0,y0:開始点
wx:水平ラインの長さ
使用例
//for 32bit mode
int d[320];
ESP_GetLine(d,10,100,320);
//for 8bit mode
unsigned char d[320];
ESP_GetLine(d,10,100,320);
void ESP_PutLine(void *buf, int x0, int y0, int wx);
説明
水平1ライン分の色情報をメモリ領域からイメージウィンドウへコピーします.
ラインの開始点は(x0,y0),終止点は(x0+wx-1,y0)です.
引数
buf:色情報が格納されている領域の先頭アドレス
領域のサイズ:wx*4 バイト(32ビットモード), wx バイト(8ビットモード)
x0,y0:開始点
wx:水平ラインの長さ
使用例
//for 32bit mode
int d[320];
…中略…
ESP_PutLine(d,10,100,320);
//for 8bit mode
unsigned char d[320];
…中略…
ESP_PutLine(d,10,100,320);
void ESP_GetWindow(void *buf, int x0, int y0, int wx, int wy);
説明
指定された矩形領域の色情報をイメージウィンドウからメモリ領域にコピーします.
矩形領域の左上座標は(x0,y0),右下座標は(x0+wx-1,y0+wy-1)です.
引数
buff:情報格納用バッファの先頭アドレス
必要な領域のサイズ:wx*wy*4 バイト(32ビットモード), wx*wy バイト(8ビットモード)
x0,y0:矩形領域の左上座標
wx,wy:矩形領域の幅および高さ
使用例
//for 32bit mode
int d[320*240];
ESP_GetWindow(d,10,100,320,240);
void ESP_PutWindow(void *buf, int x0, int y0, int wx, int wy);
説明
指定された矩形領域の情報をバッファからイメージウィンドウにコピーします.
矩形領域の左上座標は(x0,y0),右下座標は(x0+wx-1,y0+wy-1)です.
引数
buf:色情報が格納されている領域の先頭アドレス
領域のサイズ:wx*wy*4 バイト(32ビットモード), wx*wy バイト(8ビットモード)
x0,y0:矩形領域の左上座標
wx,wy:矩形領域の幅および高さ
使用例
//for 32bit mode
int d[320*240];
ESP_PutWindow(d,10,100,320,240);
void ESP_Line(int x1, int y1, int x2, int y2, int c);
説明
ラインを描画します.
この関数を呼び出した後は,ラストポジションLPが座標(x2,y2)へ更新されます.
引数
x1,y1:開始点
x2,y2:終止点
c:色 0xrrggbb
使用例
ESP_Line(0,0,639,479,RGB2C(255,100,0));
void ESP_LineTo(int x, int y, int c);
説明
ラインを描画します.
開始点はラストポジションLPが使われます.
この関数を呼び出した後は,ラストポジションLPが座標(x,y)へ更新されます.
引数
x,y:終止点
c:色 0xrrggbb
使用例
ESP_Pset(0,0,0xA0FF40);
ESP_LineTo(140,150,0xA0FF40);
void ESP_LineXOR(int x1, int y1, int x2, int y2);
説明
ラインを反転させます.
既に描画されている色と0xFFFFFFとの XOR演算 が行われます.
この関数を呼び出した後は,ラストポジションLPが座標(x2,y2)へ更新されます.
引数
x1,y1:開始点
x2,y2:終止点
使用例
ESP_LineXOR(0,0,639,479);
void ESP_LineToXOR(int x, int y);
説明
ラインを反転させます.
開始点はラストポジションLPが使われます.
既に描画されている色と0xFFFFFFとの XOR演算 が行われます.
この関数を呼び出した後は,ラストポジションLPが座標(x,y)へ更新されます.
引数
x,y:終止点
使用例
ESP_PsetXOR(0,0);
ESP_LineToXOR(140,150);
int ESP_CheckLine(int x1, int y1, int x2, int y2, int c);
説明
ライン上に指定された色があるかどうか調べます.
ラインの開始点は(x1,y1),終止点は(x2,y2)です.
引数
x1,y1:開始点
x2,y2:終止点
c:調べたい色 0xrrggbb
戻り値
0:色 c が見つからなかった.
1:色 c が見つかった.
使用例
int rtn;
rtn=ESP_CheckLine(0,0,40,55,0xff0000);
void ESP_Box(int x1, int y1, int x2, int y2, int c);
説明
開始点−終止点が対角線となるボックスを描画します.
引数
x1,y1:開始点
x2,y2:終止点
c:色 0xrrggbb
使用例
ESP_Box(0,0,639,479,RGB2C(255,100,0));
void ESP_BoxXOR(int x1, int y1, int x2, int y2);
説明
開始点−終止点が対角線となるボックスを反転させます.
既に描画されている色と0xFFFFFFとの XOR演算 が行われます.
引数
x1,y1:開始点
x2,y2:終止点
使用例
ESP_BoxXOR(0,0,639,479);
int ESP_CheckBox(int x1, int y1, int x2, int y2, int c);
説明
開始点−終止点が対角線となるボックス上に指定された色があるかどうか調べます.
引数
x1,y1:開始点
x2,y2:終止点
c:調べたい色 0xrrggbb
戻り値
0:色 c が見つからなかった.
1:色 c が見つかった.
使用例
int rtn;
rtn=ESP_CheckBox(0,0,40,55,0xff0000);
void ESP_BoxFill(int x1, int y1, int x2, int y2, int c, int f);
説明
開始点−終止点が対角線となるボックスを色 c で描画します.
また,内部は色 f で塗りつぶされます.
なお,色 f を省略すると,内部は色 c と同じ色で塗りつぶされます.
引数
x1,y1:開始点
x2,y2:終止点
c:輪郭線の色 0xrrggbb
f:内部の色 0xrrggbb
使用例
ESP_BoxFill(0,0,639,479,RGB2C(255,100,0),RGB(100,100,255));
void ESP_BoxFillXOR(int x1, int y1, int x2, int y2);
説明
開始点−終止点が対角線となるボックス(内部も含む)を反転させます.
既に描画されている色と0xFFFFFFとの XOR演算 が行われます.
引数
x1,y1:開始点
x2,y2:終止点
使用例
ESP_BoxFillXOR(0,0,639,479);
void ESP_Circle(int x0, int y0, int r, int c);
説明
円を描画します.
引数
x0,y0:円の中心座標
r:円の半径
c:色 0xrrggbb
使用例
ESP_Circle(100,90,50,0x00ff40);
void ESP_CircleXOR(int x0, int y0, int r);
説明
円を反転させます.
既に描画されている色と0xFFFFFFとの XOR演算 が行われます.
引数
x0,y0:円の中心座標
r:円の半径
使用例
ESP_CircleXOR(100,90,50);
int ESP_CheckCircle(int x0, int y0, int r, int c);
説明
円上に指定された色があるかどうか調べます.
引数
x0,y0:円の中心座標
r:円の半径
c:調べたい色 0xrrggbb
戻り値
0:色 c が見つからなかった.
1:色 c が見つかった.
使用例
int rtn;
rtn=ESP_CheckCircle(100,50,70,0xff00ff);
void ESP_CircleFill(int x0, int y0, int r, int c, int f);
説明
円を色 c で描画します.
また,内部は色 f で塗りつぶされます.
なお,色 f を省略すると,内部は色 c と同じ色で塗りつぶされます.
引数
x0,y0:円の中心座標
r:円の半径
c:輪郭線の色 0xrrggbb
f:内部の色 0xrrggbb
使用例
ESP_CircleFill(100,90,50,0x00ff40,0x0000ff);
void ESP_CircleFillXOR(int x0, int y0, int r);
説明
円(内部も含む)を反転させます.
既に描画されている色と0xFFFFFFとの XOR演算 が行われます.
引数
x0,y0:円の中心座標
r:円の半径
使用例
ESP_CircleFillXOR(100,90,50);
void ESP_Arc(int x0, int y0, int r, int c, double th1, double th2);
説明
開始角度から反時計回りに終止角度までの円弧を描画します.
引数
x0,y0:円の中心座標
r:円の半径
c:色 0xrrggbb
th1:開始角度[0.0〜2.0*ESP_PI](単位:ラジアン)
th2:終止角度[0.0〜2.0*ESP_PI](単位:ラジアン)
使用例
ESP_Arc(320,240,50,0xff00ff,ESP_PI*45.0/180.0,ESP_PI*120.0/180.0);
void ESP_ArcXOR(int x0, int y0, int r, double th1, double th2);
説明
開始角度から反時計回りに終止角度までの円弧を反転させます.
既に描画されている色と0xFFFFFFとの XOR演算 が行われます.
引数
x0,y0:円の中心座標
r:円の半径
th1:開始角度[0.0〜2.0*ESP_PI](単位:ラジアン)
th2:終止角度[0.0〜2.0*ESP_PI](単位:ラジアン)
使用例
ESP_ArcXOR(320,240,50,ESP_PI*45.0/180.0,ESP_PI*120.0/180.0);
int ESP_CheckArc(int x0, int y0, int r, int c, double th1, double th2);
説明
開始角度から反時計回りに終止角度までの円弧上に指定された色があるかどうか調べます.
引数
x0,y0:円の中心座標
r:円の半径
c:調べたい色 0xrrggbb
th1:開始角度[0.0〜2.0*ESP_PI](単位:ラジアン)
th2:終止角度[0.0〜2.0*ESP_PI](単位:ラジアン)
戻り値
0:色 c が見つからなかった.
1:色 c が見つかった.
使用例
int rtn;
rtn=ESP_CheckArc(320,240,50,0xff00ff,ESP_PI*45.0/180.0,ESP_PI*120.0/180.0);
int ESP_Paint(int x, int y, int c);
説明
開始点の色と同じ色の領域を指定された色でペイントします.
引数
x, y:開始点の座標
c:色 0xrrggbb
戻り値
ペイントできた面積(単位:ピクセル)
使用例
ESP_Paint(100,200,0xff00ff);
int ESP_Paint2(int x, int y, int c1, int c2);
説明
境界色c2で囲まれた領域を色c1でペイントします.イメージウィンドウの枠にも境界色があるとみなします.
引数
x, y:開始点の座標
c1:塗りつぶす色 0xrrggbb
c2:境界色 0xrrggbb
戻り値
ペイントできた面積(単位:ピクセル)
使用例
ESP_Paint2(100,200,0xff,0xffffff); //白色で囲まれた領域を青色でペイントする
void ESP_GraphLine(int *buff, int x0, int y0, int wx, int wy, int type, int c);
説明
指定した水平1ラインの情報を色成分に分解して断面的に描画します.
引数
buff:ラインデータの先頭アドレス [必要なデータ量=wx*4バイト]
x0,y0:描画領域の左上座標
wx,wy:描画領域の幅と高さ
type:色成分と描画モードを指定します.ESP_R/ESP_G/ESP_B/ESP_H/ESP_S/ESP_V/ESP_Y/ESP_Cr/ESP_Cbから1つとESP_DOT/ESP_LINEから1つを選び,OR指定します.
また8ビットモードのときはESP_L(輝度)/ESP_DOT/ESP_LINEが指定できます.
c:描画色 0xrrggbb
使用例
int buf[640];
ESP_GetLine(buf,0,100,640);
ESP_GraphLine(buf,0,0,640,256,ESP_R|ESP_LINE,0xff0000);
void ESP_CutImage(void);
説明
イメージウィンドウの全内容をカット(切り取り)します.カットされた内容はWindowsのクリップボードに記憶されます.実行後,イメージウィンドウの内容は黒で初期化されます.カットしたデータは他のアプリケーションソフトなどでペースト(貼り付け)できます.
使用例
ESP_CutImage();
void ESP_CopyImage(void);
説明
イメージウィンドウの全内容をコピーします.コピーされた内容はWindowsのクリップボードに記憶され,他のアプリケーションソフトでペースト(貼り付け)することが可能となります.
使用例
ESP_CopyImage();
void ESP_PasteImage(int x0, int y0);
説明
クリップボードに記憶されているビットマップ画像を,イメージウィンドウの指定位置に貼り付けます.クリップボードが空あるいはビットマップ画像以外のデータが入っている場合,この関数は無視されます.
引数
x0,y0:貼り付ける位置(左上座標)
使用例
ESP_PasteImage(20,10);
int ESP_GetColorTable(int *rgb);
説明
カラーテーブルを取得します.
引数
rgb:カラーテーブルの先頭アドレス
カラーテーブルは色情報(int型,0xrrggbb,RGBQUAD型と互換)が256個並んだものです.
戻り値
0:正常終了.
1:イメージウィンドウが正しく選択されていない.
2:選択されているイメージウィンドウは8ビットモードではない.
使用例
int rgb[256];
ESP_CreateImage8(0,"Image",0,0,640,480,100);
ESP_GetColorTable(rgb);
int ESP_SetColorTable(int *rgb);
説明
カラーテーブルを設定します.
引数
rgb:カラーテーブルの先頭アドレス
カラーテーブルは色情報(int型,0xrrggbb,RGBQUAD型と互換)が256個並んだものです.
戻り値
0:正常終了.
1:イメージウィンドウが正しく選択されていない.
2:選択されているイメージウィンドウは8ビットモードではない.
使用例
int rgb[256];
ESP_CreateImage8(0,"Image",0,0,640,480,100);
・・・中略・・・
ESP_SetColorTable(rgb);
void ESP_Bezier(int x0,int y0,int x1,int y1,int x2,int y2,int x3,int y3, int div, int c);
説明
ベジェ曲線を描画します.
サンプルプログラムもありますので参考にしてください.
引数
x0,y0:始点
x1,y1:制御点1
x2,y2:制御点2
制御点については下の補足図を参照してください.
x3,y3:終点
div:分割数
分割数とは,曲線を複数の線分に分けて描画するときの線分数です.
分割数は大きいほど曲線が滑らかになります.
c:色 0xrrggbb
補足図
使用例
ESP_Bezier(30,30,300,100,400,300,100,450,30,0xFFFFFF);
void ESP_BezierXOR(int x0,int y0,int x1,int y1,int x2,int y2,int x3,int y3, int div);
説明
ベジェ曲線を描画します.
既に描画されている色と0xFFFFFFとの XOR演算 が行われます.
引数
x0,y0:始点
x1,y1:制御点1
x2,y2:制御点2
制御点については ESP_Bezier() の補足図を参照してください.
x3,y3:終点
div:分割数
分割数とは,曲線を複数の線分に分けて描画するときの線分数です.
分割数は大きいほど曲線が滑らかになります.
使用例
ESP_BezierXOR(30,30,300,100,400,300,100,450,30);
テキスト描画
void ESP_Gputc(char c);
void ESP_Gputs(const char *s);
void ESP_Gprintf(const char *format [, argument]...);
説明
イメージウィンドウへ文字(列)を描画します.
これらの関数では,ESPLIB が提供するドットフォント(サイズ8x16)が使用されます.
ESP_Gputc() は1文字を描画します.
ESP_Gputs() は文字列を描画します.
ESP_Gprintf() は書式付き文字列を描画します.
制御文字 \n をサポートしています.漢字には対応していません.
描画するときの色は ESP_Gtextcolor() で指定します.
描画開始座標は ESP_Glocate() で指定します.
長いテキストの場合,イメージウィンドウの右端で自動的に改行されます.
引数
c:文字コード(アスキーコード)
s:文字列へのポインタ
format:書式付き文字列へのポインタ
argument...:引数(必要に応じて)
使用例
ESP_Gputc('a');
ESP_Gputs("abc\n");
ESP_Gprintf("x,y=%d,%d\n",x,y);
void ESP_Gtextcolor(int c);
説明
イメージウィンドウへ文字を描画するときの色を指定します.
引数
c:色 0xrrggbb
使用例
ESP_Gtextcolor(RGB2C(255,0,255));
ESP_Gtextcolor(0x40ff80);
void ESP_Glocate(int x, int y);
説明
イメージウィンドウへ文字を描画するときの開始座標(左下)を指定します.
引数
x,y:座標
使用例
ESP_Glocate(200,140);
void ESP_TTPutc(int c);
void ESP_TTPuts(const char *s);
void ESP_TTPrintf(const char *format, ...);
説明
イメージウィンドウへTrueType文字(列)を描画します.
ESP_TTPutc() は1文字を描画します.
ESP_TTPuts() は文字列を描画します.
ESP_TTPrintf() は書式付き文字列を描画します.
描画色の変更には ESP_TTColor() を使います.
描画開始位置の指定には ESP_TTPosition() を使用します.
文字サイズの変更には ESP_TTSize() を使用します.
フォントやスタイルの変更には ESP_TTFont(), ESP_TTStyle() を使用します.
長いテキストの場合でも,イメージウィンドウ右端での自動改行は行われません.
引数
c:文字コード(アスキーコードまたはS-JISコード)
s:文字列へのポインタ
format:書式付き文字列へのポインタ
argument...:引数(必要に応じて)
制御文字
以下の制御文字をサポートします.
\n : 改行
\1 : 斜体フォント指定の開始
\2 : 斜体フォント指定の解除
\3 : 太字フォント指定の開始
\4 : 太字フォント指定の解除
\5 : 下線フォント指定の開始
\6 : 下線フォント指定の解除
使用例
ESP_TTPutc('あ');
ESP_TTPuts("abc\nあいう\n");
ESP_TTPrintf("パラメータ=%d,%d\n",x,y);
ESP_TTPrintf("\2\4\6\1 Italic\n\2\3 Bold\4\n \5Underline\6\n Normal\n");
int ESP_TTFont(const char *fontname);
説明
イメージウィンドウへTrueType文字を描画するときのフォントを指定します.
標準的なWindows環境では,"MS 明朝","MS ゴシック","Century","Arial"などが使用できます.環境によって設定できるフォントおよびフォント名は異なります.
ESPLIB起動時は "MS ゴシック" が設定されています.
引数
fontname:論理フォント名(論理フォント名についての説明は割愛します)
戻り値
0:正常終了
1:フォントの設定に失敗した(対応するフォントが見つからなかったなど)
使用例
ESP_TTFont("MS P明朝");
ESP_TTFont("MS ゴシック");
int ESP_TTStyle(int style);
説明
TrueTypeフォントのスタイルを指定します.
ESPLIB起動時は 0=指定なし が設定されています.
引数
style:以下の定数の組み合わせ(論理和演算子 '|' を使う)によってフォントのスタイルを指定します.何も設定しないときは 0 を指定します.
ESP_TT_ITALIC (斜体)
ESP_TT_BOLD (太字)
ESP_TT_UNDERLINE (下線)
ESP_TT_STRIKEOUT (取消線)
戻り値
0:正常終了
1:設定に失敗した
使用例
ESP_TTStyle(0);
ESP_TTStyle(ESP_TT_BOLD | ESP_TT_ITALIC);
void ESP_TTPosition(int x, int y);
説明
TrueType文字を描画するときの描画開始位置(左下)を設定します.
ESPLIB 起動時は(0,0)に設定されています.
引数
x,y:左下座標(ピクセル単位)
使用例
ESP_TTPosition(30,50);
int ESP_TTSize(int wx, int wy);
説明
TrueType文字を描画するときの文字サイズを指定します.ただし,半角文字を描画する場合,文字の幅はここで指定した値の半分のサイズで描画されます.プロポーショナルフォントでは,描画される文字の幅は文字によって異なります.
ESPLIB 起動時は wx=16, wy=16 に設定されています.
引数
wx:文字の幅(ピクセル単位)
wy:文字の高さ(ピクセル単位)
戻り値
0:正常終了
1:設定に失敗した
使用例
ESP_TTSize(50,50);
void ESP_TTColor(int c);
説明
TrueType文字を描画するときの色を指定します.
ESPLIB 起動時は 白(=0xffffff) に設定されています.
引数
c:描画色 0xrrggbb
使用例
ESP_TTColor(0x00ff00);
画像ファイル関連
int ESP_ImageLoad(const char *filename, int x0, int y0, int zoom);
説明
BMP,ICON,GIF,JPEG,PNG,TIFF,WMF,EMFに対応した画像読み込み関数です.
現在選択されているイメージウィンドウに読み込まれます.
画像を読み込んだ後のウィンドウ内容更新はESP_Update() 等を使います.
引数
filename:ファイル名文字列へのポインタ
(ファイル名は拡張子まで指定すること)
x0,y0:描画を開始する左上座標
zoom:0または正の値…描画倍率(単位:%)
負の値…横幅を-zoom[pixel]に合わせて描画
戻り値
0:正常終了
1:ファイルが読めなかった(未対応のフォーマット,ファイルが見つからないなど)
2:指定されたイメージウィンドウが存在しない
使用例
ESP_ImageLoad("test.jpg",0,0,100);
ESP_ImageLoad("test.bmp",100,40,-640);
ESP_Update();
int ESP_ImageSave(int format, const char *filename, int x0, int y0, int
wx, int wy);
説明
指定された矩形領域をBMP/JPEG/GIF/PNG/TIFFファイルとして保存します.
JPEGの画質の初期値は100[%]です.これを変更するにはESP_JpegQuality() を使います.
画像を読み込んだ後のウィンドウ内容更新はESP_Update() 等を使います.
引数
format:画像ファイルの形式.以下の中から1つを選択します.
ESP_BMP:BMP[24bit]形式 (.bmp)
ESP_JPEG:JPEG[24bit]形式 (.jpg)
ESP_GIF:GIF[8bit]形式 (.gif)
ESP_PNG:PNG[24bit]形式 (.png)
ESP_TIFF:TIFF[24bit]形式 (.tif)
filename:ファイル名文字列へのポインタ
(拡張子は付けても付けなくてもどちらでも構いません.
ただし,formatに対応しない拡張子を指定した場合は自動的に追加されます)
x0,y0:矩形領域の左上座標 (単位:pixel)
wx,wy:矩形領域の幅および高さ (単位:pixel)
戻り値
0:正常終了
1:ファイル保存関係のエラー
2:wxまたはwyが0だった
3:指定されたイメージウィンドウが存在しない
4:formatが範囲外
5:ビット数が8や32以外だったので中止した
使用例
ESP_ImageSave(ESP_JPEG,"test",0,0,640,480);
void ESP_JpegQuality(int quality);
説明
ESP_ImageSave() により画像をJPEG形式で保存する際の画質を変更します.
ESPLIBが起動されたときの初期値は100[%]です.
引数
quality:画質 0〜100 [%]
画質が高いほどファイルサイズは大きくなります.
使用例
ESP_JpegQuality(0);
ESP_ImageSave(ESP_JPEG,"test0",0,0,640,480);
ESP_JpegQuality(75);
ESP_ImageSave(ESP_JPEG,"test75",0,0,640,480);
int ESP_ImageOpen(const char *name, int x0, int y0, int zoom, int *i, int
*wx, int *wy);
説明
イメージウィンドウを新規作成し,そこへ画像ファイルを読み込んで描画します.
作成されるイメージウィンドウのサイズは,読み込む画像のサイズと同じです.
イメージウィンドウのタイトルは画像ファイル名になります.
BMP,ICON,GIF,JPEG,PNG,TIFF,WMF,EMFに対応しています.
引数
name:画像ファイル名へのポインタ
x0,y0:生成するイメージウィンドウの左上座標を指定する
(-1を指定するとおまかせモード)
zoom:イメージウィンドウの表示倍率(単位:%)
ただし,読み込む画像のサイズに応じて適切な値へ修正される場合もあります.
格納情報
i:生成されたイメージウィンドウの番号
wx,wy:生成されたイメージウィンドウの幅および高さ
戻り値
0:正常終了
1:ファイルが開けない or 存在しない
2:イメージウィンドウが作成できない
使用例
int i,w,h;
ESP_ImageOpen("image.bmp",0,0,100,&i,&w,&h);
ESP_Printf("i=%d\n",i);
int ESP_GetImageInfo(const char *filename, int *wx, int *wy, int *bit);
説明
指定された画像ファイルに関する情報(サイズ,ビット数)を取得します.
BMP,ICON,GIF,JPEG,PNG,TIFF,WMF,EMFに対応しています.
引数
filename:画像ファイル名へのポインタ
wx:幅情報を納める変数へのポインタ
wy:高さ情報を納める変数へのポインタ
bit:ビット数情報を納める変数へのポインタ
(*bit は 1/4/8/16/24/32/48/64 のいずれかの値になります)
戻り値
0:正常終了
1:ファイルが開けない or 存在しない
使用例
int w,h,b;
ESP_GetImageInfo("image.bmp",&w,&h,&b);
ESP_Printf("wx,wy,bit=%d,%d,%d\n",w,h,b);
int ESP_BmpLoad(const char *filename, int x0, int y0);
説明
BMPファイルを読み込んで,イメージウィンドウに描画します.
圧縮形式のBMPファイルも読み込めます.
<8ビットモードのイメージウィンドウにおける補足>
24ビットBMP画像を8ビットモードのイメージウィンドウで読み込ませる場合,現在のカラーテーブルの中から最も近い色を使って画像が読み込まれます.1,4,8ビットBMP画像を読み込ませる場合は,そのBMP画像に含まれるカラーテーブルも読み込んで設定されます.
引数
filename:ファイル名へのポインタ (拡張子まで正確に指定する必要があります)
x0,y0:描画を開始する左上座標
戻り値
0:正常終了
1:ファイルが読めなかった
2:ファイルが開けない
3:イメージウィンドウが存在しない
使用例
ESP_BmpLoad("test.bmp",0,0);
ESP_Update();
int ESP_BmpSave(const char *filename, int x0, int y0, int wx, int wy);
説明
指定された矩形領域をBMPファイルとして保存します.
保存形式は,32ビットモードでは24ビット(非圧縮),8ビットモードでは8ビット(非圧縮)です.
BMPファイルには72dpiの情報が埋め込まれます.
引数
filename:ファイル名へのポインタ
(拡張子が".bmp"以外や省略された場合,自動的に".bmp"が付加されます)
x0,y0:矩形領域の左上座標
wx,wy:矩形領域の幅および高さ
戻り値
0:正常終了
1:ファイル関係のエラー
2:イメージウィンドウが存在しない
使用例
ESP_Select(1);
ESP_BmpSave("test.bmp",0,0,320,240);
テキストウィンドウ関連
int ESP_OpenTextWindow(int i, int x0, int y0, int wx, int wy);
説明
テキストウィンドウを開きます.
テキストウィンドウは最大256個まで開くことができます.
ESP_Printf() や ESP_Input() 等による文字入出力は選択されているテキストウィンドウに対して有効です.
各ウィンドウはカーソル位置を1つ保持しています.このカーソル位置の初期値は(0,0)です.
各ウィンドウは文字色と背景色を保持しています.この文字色と背景色の初期値はそれぞれ白(0xffffff),黒(0x000000)です.
開かれたウィンドウは選択状態になります.すなわち,この関数が成功した場合,ESP_SelectTW()が1回実行された状態になっています.
すでに番号 i のテキストウィンドウが存在する場合,そのテキストウィンドウを最前面にし,選択状態にします.
引数
i:テキストウィンドウの番号[0〜255]
x0,y0:テキストウィンドウの左上座標
wx,wy:テキストウィンドウ全体の幅および高さ(単位:ピクセル)
(負の値を指定した場合,デフォルト値(400,288)が設定されます)
戻り値
0:正常終了
1:指定番号のテキストウィンドウはすでに存在する
2:ウィンドウの番号が範囲外
使用例
ESP_OpenTextWindow(0,10,100,300,100);
int ESP_CloseTextWindow(int i);
説明
テキストウィンドウを消滅させます.
他のテキストウィンドウが存在する場合,それらのうち最も若い番号のウィンドウが選択状態になります.
番号 i のテキストウィンドウが存在しない場合,この関数は無視されます.
引数
i:テキストウィンドウの番号[0〜255]
戻り値
0:正常終了
1:引数 i が範囲外または番号 i のテキストウィンドウが存在しない
使用例
ESP_CloseTextWindow(0);
int ESP_SelectTW(int i);
説明
テキストウィンドウを選択します.
ESP_Printf() や ESP_Input() 等によるテキスト入出力は選択されているウィンドウに対して有効です.
現在の選択値はスタック構造(8段)の履歴バッファに保存されます.ESP_UnSelectTW() により過去の選択に戻すことができます.
ESP_OpenTextWindow() が成功した場合,ESP_SelectTW()が1回実行された状態になっています.
引数
i:テキストウィンドウの番号[0〜255]
戻り値
0:正常終了
1:引数 i が範囲外または番号 i のテキストウィンドウが存在しない
使用例
ESP_SelectTW(0);
ESP_Printf("abc");
ESP_SelectTW(1);
ESP_Printf("ABC");
int ESP_UnSelectTW(void);
説明
テキストウィンドウの選択を1つ前の状態に戻します.
ESP_SelectTW() によって保存された履歴バッファの情報を利用します.履歴バッファはスタック構造(8段)となっており,この関数を実行することにより,履歴バッファ内の情報は新しい方へ1つずつ移動します.
戻り値
0:正常終了
1:1つ前の番号のテキストウィンドウを選択できなかった
使用例
ESP_OpenTextWindow(1,-1,-1,-1,-1);
ESP_OpenTextWindow(0,10,100,300,100);
ESP_SelectTW(1);
ESP_Printf("Text out to text window 1");
ESP_UnSelectTW();
ESP_Printf("Text out to text window 0");
int ESP_StartLog(int i);
説明
ログ処理を開始(または再開)します.
ログファイルの名前は ESPLIBab-(年月日)-(時分秒).LOG となります.
(aは多重起動に対応したID番号(0-9),bはテキストウィンドウの番号(0-255))
ログ処理が開始されると,ESP_Printf() や ESP_Input() 等による入出力の結果はすべてログファイルに記録されます.
初回あるいはESP_EndLog() によってログ処理が終了状態にある場合,新しいファイル名で新規作成します.しかし,ESP_StopLog()等によりログ処理が一時停止状態の場合,現存のログファイルを用いてログ処理が再開されます.
デフォルトの拡張子は".LOG"ですが,これを変更するにはesplib.hより先にESP_LOGEXTを定義しておきます.
例(ログファイルの拡張子を.csvにする場合):
#define ESP_LOGEXT ".csv"
#include <esplib.h>
Windowsのシャットダウン操作が行われたとき,ログデータはディスクに書き込まれ,ログファイルは自動的に閉じられます.
引数
i:テキストウィンドウの番号[0〜255]
戻り値
0:正常終了
1:ログ処理はすでに開始している
2:ログファイルを作成できなかった
3:引数 i が範囲外または番号 i のテキストウィンドウが存在しない
使用例
ESP_StartLog(0);
ESP_Printf("これは記録される");
ESP_StopLog(0);
ESP_Printf("これは記録されない");
void ESP_StartAllLog(void);
説明
開かれているすべてのテキストウィンドウについて,ログ処理を開始(または再開)します.
基本的な動作はESP_StartLog()と同じなので,そちらを参照してください.
使用例
ESP_StartAllLog();
int ESP_StopLog(int i);
説明
ログ処理を一時停止しますが,ログファイルは閉じません.
停止しているとき,ESP_Printf() 等による表示結果はログファイルに記録されません.
ログ処理を再開するには,ESP_StartLog(), ESP_StartAllLog() を使用します.
Windowsのシャットダウン操作が行われたとき,ログデータはディスクに書き込まれ,ログファイルは自動的に閉じられます.
引数
i:テキストウィンドウの番号[0〜255]
戻り値
0:正常終了
1:ログ処理は開始していない
2:引数 i が範囲外または番号 i のテキストウィンドウが存在しない
使用例
ESP_StopLog(5);
void ESP_StopAllLog(void);
説明
開かれているすべてのテキストウィンドウについて,開始されているログ処理を一時停止します.
基本的な動作はESP_StopLog()と同じなので,そちらを参照してください.
使用例
ESP_StopAllLog();
int ESP_EndLog(int i);
説明
ログ処理を終了し,ログファイルを閉じます.
(注)いったんログ処理を終了すると,次回,ログ処理を開始(再開)しても前回のログファイルへの追記にはならず,新規開始となります.
ログ処理を一時中断し,あとで再開し追記したいときは,ESP_StopLog() を使ってください.
Windowsのシャットダウン操作が行われたとき,ログデータはディスクに書き込まれ,ログファイルは自動的に閉じられます.
引数
i:テキストウィンドウの番号[0〜255]
戻り値
0:正常終了
1:ログ処理は開始していない
2:引数 i が範囲外または番号 i のテキストウィンドウが存在しない
使用例
ESP_EndLog(3);
void ESP_EndAllLog(void);
説明
開かれているすべてのテキストウィンドウについて,開始されているログ処理を終了させます.
基本的な動作はESP_EndLog()と同じなので,そちらを参照してください.
使用例
ESP_EndAllLog();
int ESP_FlushLog(int i);
説明
内部バッファに残っているディスクに書き込まれていないログデータをフラッシュします.
テキストウィンドウにおいてログ処理が開始されているときに機能します.
Windowsのシャットダウン操作が行われたとき,残っているログデータは自動的にディスクに書き込まれ,ログファイルは閉じられます.
引数
i:テキストウィンドウの番号[0〜255]
戻り値
0:正常終了
1:ログ処理は開始していない
2:引数 i が範囲外または番号 i のテキストウィンドウが存在しない
使用例
ESP_FlushLog(0);
void ESP_FlushAllLog(void);
説明
開かれているすべてのテキストウィンドウについて,
内部バッファに残っているディスクに書き込まれていないログデータをフラッシュします.
基本的な動作はESP_FlushLog()と同じなので,そちらを参照してください.
使用例
ESP_FlushAllLog();
int ESP_CopyLog(int i);
説明
ログ処理中あるいは一時停止中のログ内容をクリップボードにコピーします.
ログ処理中の場合,記録された所までの内容がコピーされ,引き続きログ処理が続行されます.
ログが開始されていない場合や終了状態にある場合,コピーは行われません.
引数
i:テキストウィンドウの番号[0〜255]
戻り値
0:正常終了
1:クリップボードがオープンできなかった
2:ログ処理が開始/一時停止されていない or 終了状態である
3:メモリが確保できなかった
4:引数 i が範囲外または番号 i のテキストウィンドウが存在しない
使用例
ESP_CopyLog(0);
テキスト入出力
下記の関数は選択されているテキストウィンドウに対して有効です.
void ESP_Printf(const char *format [, argument]...);
void ESP_PrintfU(const char *format [, argument]...);
説明
書式付き文字列を出力します.
使える書式は一般的な printf() と同じです.制御文字 \n や漢字もサポートしています.
ESP_Printf()ではテキストウィンドウの内容は更新されません.
ESP_PrintfU()は呼び出し毎にテキストウィンドウの内容を更新しますが,速度が若干低下します.
テキストウィンドウの更新にはESP_STOPも利用できます.
文字列に"%20\n"等の不正な書式指定が含まれているとフリーズすることがあります.その場合は
文字列をそのまま出力できるESP_Puts()/ESP_PutsU()を使ってください.
ログ処理が開始されている場合,表示した文字列はログファイルに記録されます.
テキストウィンドウが1つも存在しない場合,この関数は無視されます.
<補足>
一度に表示できる文字数は4096バイトです.このデフォルト値を変更するには
#define ESP_STRMAX 16384 (←16384バイトに変更する例)
を #include <esplib.h> より前に記述してください.
<マルチスレッド対応について>
ESP_Printf()/ESP_PrintfU()はマルチスレッド対応です.同時に複数のスレッドから呼び出されても,
先着優先で,正しく処理します.
引数
format:書式付き文字列へのポインタ
argument...:引数(必要に応じて)
使用例
ESP_Printf("x,y=%d,%d\n",x,y);
void ESP_Puts(const char *s);
void ESP_PutsU(const char *s);
説明
文字列を出力します.
ESP_Printf()と異なり%で始まる書式は使えず,そのまま出力されます.
制御文字 \n や漢字はサポートしています.
ESP_Puts()ではテキストウィンドウの内容は更新されません.
ESP_PutsU()は呼び出し毎にテキストウィンドウの内容を更新しますが,速度が若干低下します.
テキストウィンドウの更新にはESP_STOPも利用できます.
ログ処理が開始されている場合,表示した文字列はログファイルに記録されます.
テキストウィンドウが1つも存在しない場合,この関数は無視されます.
<補足>
一度に表示できる文字数は4096バイトです.このデフォルト値を変更するには
#define ESP_STRMAX 16384 (←16384バイトに変更する例)
を #include <esplib.h> より前に記述してください.
<マルチスレッド対応について>
ESP_Puts()/ESP_PutsU()はマルチスレッド対応です.同時に複数のスレッドから呼び出されても,
先着優先で,正しく処理します.
引数
s:文字列へのポインタ
使用例
ESP_Puts("Text\n");
void ESP_PrintfBin(unsigned long long data, int bit);
説明
数値をバイナリ形式で表示します.
表示するビット数は引数bitによって指定します.表示ビット数を超える大きな値では,上位ビットの表示が欠けます.例えば,257を8ビットで表示させると,00000001となります.
内部ではESP_Puts()を呼び出すため,テキストウィンドウの内容は更新されません.
ログ処理が開始されている場合,この関数によって表示した文字列はログファイルに記録されます.
テキストウィンドウが1つも存在しない場合,この関数は無視されます.
<マルチスレッド対応について>
ESP_PrintfBin()はマルチスレッド対応です.同時に複数のスレッドから呼び出されても,
先着優先で,正しく処理します.
引数
data:数値
bit:表示ビット数(1〜64)
使用例
int data=257;
ESP_PrintfBin(data,10);
void ESP_PrintfDateTime(void);
説明
現在の日時を表示します.
表示される文字列の形式は"Date-Time 2016/08/22-12:34:56\n"といった感じになります.
ログ処理が開始されている場合,この関数によって表示した文字列はログファイルに記録されます.
テキストウィンドウが1つも存在しない場合,この関数は無視されます.
<マルチスレッド対応について>
この関数はマルチスレッド対応です.同時に複数のスレッドから呼び出されても,
先着優先で,正しく処理します.
使用例
ESP_PrintfDateTime();
void ESP_Locate(int cx, int cy);
説明
カーソル位置を指定します.
テキストウィンドウが1つも存在しない場合,この関数は無視されます.
引数
cx,cy:新しいカーソル位置(桁,行)(単位:文字)
cxやcyに-1を指定すると「変更しない」の意味になります.
使用例
ESP_Locate(4,2);
ESP_Locate(0,-1);
void ESP_SetColor(int tc, int bc=-1);
説明
文字色と背景色を設定します.
古い色設定値はスタック構造(8段)の履歴バッファに保存されます.ESP_RestoreColor() を使うと色設定を復元できます.
テキストウィンドウが1つも存在しない場合,この関数は無視されます.
引数
tc:文字の色(0xrrggbb)
ここに-1を指定した場合,変更しないという意味になります.
bc:背景の色(0xrrggbb)
ここに-1を指定するか,この引数が省略された場合,変更しないという意味になります.
使用例
ESP_SetColor(0x00ff00, 0);
ESP_SetColor(0xff0000);
ESP_SetColor(-1, 0x808080);
void ESP_RestoreColor(void);
説明
文字色と背景色を復元します.
ESP_SetColor() によって保存された履歴バッファの情報を利用します.履歴バッファはスタック構造(8段)となっており,この関数を実行することにより,履歴バッファ内の情報は新しい方へ1つずつ移動します.
テキストウィンドウが1つも存在しない場合,この関数は無視されます.
使用例
ESP_SetColor(0x00ff00);
ESP_Printf("green");
ESP_RestoreColor();
ESP_Printf("abc");
void ESP_Input(char *buffer);
説明
選択されているテキストウィンドウを最前面にし,点滅カーソルを表示させ,文字列の入力を促します.
Backspaceキーにより修正が可能です.全角文字(漢字)の入力にも対応しています.
ログ処理が開始されている場合,ここで入力した文字列もログファイルに記録されます.
入力文字数は256文字に制限しています.(ソース中,ESPTWINPUTMAXの値で指定)
テキストウィンドウが1つも存在しない場合,この関数は無視されます.
引数
buffer:文字列格納用バッファの先頭アドレス
使用例
char buf[100];
ESP_Input(buf);
void ESP_ClearTextWindow(void);
説明
内容を消去します.
カーソル位置は左上原点(0,0)に戻ります.
テキストウィンドウが1つも存在しない場合,この関数は無視されます.
使用例
ESP_ClearTextWindow();
色変換
RGB関連
int RGB2C(r,g,b);
void C2RGB(int c, int *pr, int *pg, int *pb);
int C2R(int c);
int C2G(int c);
int C2B(int c);
説明
各種の色変換を行います.
引数
c:色 0xrrggbb [0〜16777215]
r:赤 [0〜255]
g:緑 [0〜255]
b:青 [0〜255]
pr:赤を格納する変数へのポインタ
pg:緑を格納する変数へのポインタ
pb:青を格納する変数へのポインタ
戻り値
上記引数の範囲と同じ範囲の値が返ります.
使用例
int c,r,g,b;
c=RGB2C(100,200,255);
C2RGB(c,&r,&g,&b);
HSV関連
int HSV2C(int h, int s, int v);
void C2HSV(int c, int *ph, int *ps, int *pv);
int C2H(int c);
int C2S(int c);
int C2V(int c);
説明
各種の色変換を行います.
引数
c:色 0xrrggbb
h:色相 [0〜359]
s:彩度 [0〜255]
v:輝度 [0〜255]
ph:色相を格納する変数へのポインタ
ps:彩度を格納する変数へのポインタ
pv:輝度を格納する変数へのポインタ
戻り値
上記引数の範囲と同じ範囲の値が返ります.
使用例
int c,h,s,v;
c=HSV2C(60,255,255);
h=C2H(c);
s=C2S(c);
v=C2V(c);
YCrCb関連
int YCrCb2C(int y, int cr, int cb);
int YCrCb2R(int y, int cr, int cb);
int YCrCb2G(int y, int cr, int cb);
int YCrCb2B(int y, int cr, int cb);
void C2YCrCb(int c, int *py, int *pcr, int *pcb);
int C2Y(int c);
int C2Cr(int c);
int C2Cb(int c);
int RGB2Y(int r, int g, int b);
int RGB2Cr(int r, int g, int b);
int RGB2Cb(int r, int g, int b);
説明
各種の色変換を行います.
引数
c:色 0xrrggbb
y:明るさ [0〜255]
cr:色差Cr [-128〜127]
cb:色差Cb [-128〜127]
py:明るさを格納する変数へのポインタ
pcr:色差Crを格納する変数へのポインタ
pcb:色差Cbを格納する変数へのポインタ
戻り値
上記引数の範囲と同じ範囲の値が返ります.
使用例
int c,y,cr,cb;
c=YCrCb2C(255,10,-10);
C2YCrCb(c,&y,&cr,&cb);
YUV関連
int Yuv2C(int y, int u, int v);
int Yuv2R(int y, int u, int v);
int Yuv2G(int y, int u, int v);
int Yuv2B(int y, int u, int v);
void C2Yuv(int c, int *py, int *pu, int *pv);
int C2Y(int c);
int C2u(int c);
int C2v(int c);
int RGB2Y(int r, int g, int b);
int RGB2u(int r, int g, int b);
int RGB2v(int r, int g, int b);
説明
各種の色変換を行います.
HSVのVと混同しないため,関数名には小文字を使いました.
引数
c:色 0xrrggbb
y:明るさ [0〜255]
u:色差u [-128〜127]
v:色差v [-128〜127]
py:明るさを格納する変数へのポインタ
pu:色差uを格納する変数へのポインタ
pv:色差vを格納する変数へのポインタ
戻り値
上記引数の範囲と同じ範囲の値が返ります.
使用例
int c,y,u,v;
c=Yuv2C(255,10,-10);
C2Yuv(c,&y,&u,&v);
YIQ関連
int YIQ2C(int y, int i, int q);
int YIQ2R(int y, int i, int q);
int YIQ2G(int y, int i, int q);
int YIQ2B(int y, int i, int q);
void C2YIQ(int c, int *py, int *pi, int *pq);
int C2Y(int c);
int C2I(int c);
int C2Q(int c);
int RGB2Y(int r, int g, int b);
int RGB2I(int r, int g, int b);
int RGB2Q(int r, int g, int b);
説明
各種の色変換を行います.
引数
c:色 0xrrggbb
y:明るさ [0〜255]
i:色差I [-128〜127]
q:色差Q [-128〜127]
py:明るさを格納する変数へのポインタ
pi:色差Iを格納する変数へのポインタ
pq:色差Qを格納する変数へのポインタ
戻り値
上記引数の範囲と同じ範囲の値が返ります.
使用例
int c,y,i,q;
c=YIQ2C(255,10,-10);
C2YIQ(c,&y,&i,&q);
文字コード変換
void wchar_t2char(const wchar_t *w, char *s, int ssize);
説明
Unicode文字列(wchar_t型)をMultiByte文字列(char型)へ変換します.
引数
w:Unicode文字列の先頭アドレス
s:MultiByte文字列を格納する領域の先頭アドレス
ssize:領域 s の最大サイズ (単位:バイト)
使用例
const wchar_t *w= L"あいうabc";
char s[256];
wchar_t2char(w, s, 256);
void char2wchar_t(const char *s, wchar_t *w, int wsize);
説明
MultiByte文字列(char型)をUnicode文字列(wchar_t型)へ変換します.
引数
s:MultiByte文字列の先頭アドレス
w:Unicode文字列を格納する領域の先頭アドレス
wsize:領域 w の最大サイズ (単位:文字数)
使用例
const char *s= "いろはABC";
wchar_t w[256];
char2wchar_t(s, w, 256);
インプットボックス関連
void ESP_OpenInputBox(int x0, int y0, int item_num);
説明
インプットボックスを開きます.
インプットボックスが既に存在するとき,この関数は無視されます.
引数
x0,y0:インプットボックスの左上座標
item_num:使用する項目数 [1〜30]
使用例
ESP_OpenInputBox(10,20,3);
int ESP_CloseInputBox(void);
説明
インプットボックスを閉じます.
戻り値
0:正常終了
1:インプットボックスが存在しない
使用例
ESP_CloseInputBox();
void ESP_ResizeInputBox(int ipart, int epart);
説明
インプットボックスの各部分のサイズを変更します.
インプットボックスが存在しないとき,この関数は無視されます.
引数
ipart:名前部分のサイズ (なお, 0...変更しない, -1...デフォルト値)
epart:入出力部分のサイズ (なお, 0...変更しない, -1...デフォルト値)
使用例
ESP_ResizeInputBox(100,200);
int ESP_GetInputBoxI(int i);
double ESP_GetInputBoxD(int i);
void ESP_GetInputBoxS(int i, char *buf, int bufsize);
char ESP_GetInputBoxC(int i);
説明
インプットボックスの指定した項目を読み出して返します.
項目番号iが存在しないとき,この関数は0, 0.0, ""を返します.
ESP_GetInputBoxD()は,内部で保存されているdouble型値を返します.この内部値はその項目からフォーカスが離れる際には,項目に入力されている文字列をdouble型値へ変換したものになります.フォーカス変化がない限り,ESP_SetInputBoxD()による設定値が保存されています.
引数
i:項目番号[0〜29]
buf:文字列格納用バッファの先頭アドレス
bufsize:バッファbufの最大サイズ(単位:バイト)
戻り値
整数値,double型浮動小数点,文字列,文字コード
使用例
int n;
double d;
char s[256];
char c;
n=ESP_GetInputBoxI(0);
d=ESP_GetInputBoxD(5);
ESP_GetInputBoxS(3,s,256);
c=ESP_GetInputBoxC(2);
void ESP_SetInputBoxI(int i, int n);
void void ESP_SetInputBoxD(int i, double d, int digits=18);
void ESP_SetInputBoxS(int i, const char *s);
void ESP_SetInputBoxC(int i, char c);
説明
インプットボックスの指定した項目に文字や数値などの情報を設定します.
項目番号iが存在しないときは,この関数は無視されます.
文字列の長さの上限は255バイトです.
ESP_SetInputBoxD()では,文字列へ変換したデータが表示されますが,内部では元のdの値がdouble型の精度で保存されています.そして,ESP_GetInputBoxD()による読み出しの際にはこの内部の値が読み出しに使われます.
引数
i:項目番号[0〜29]
n:整数
d:double型浮動小数点
digits:dを文字列へ変換する際の有効桁数(省略時は18)
s:文字列へのポインタ
c:文字コード
使用例
ESP_SetInputBoxI(0,128);
ESP_SetInputBoxD(1,2.56);
ESP_SetInputBoxS(2,"Message");
ESP_SetInputBoxC(3,'A');
void ESP_SetInputBoxTitle(int i, const char *title);
説明
インプットボックスの項目名を変更します.
デフォルトでは"Item x"となっています.
項目名をマウス左ダブルクリックしても,手動で変更することができます.
引数
i:項目番号[0〜29]
title:タイトル名へのポインタ
使用例
ESP_SetInputBoxTitle(1,"Threshold 2");
void ESP_SelectInputBox(int i);
説明
インプットボックスのウィンドウを最前面にし,i番目の項目にカーソルを合わせます.
引数
i:項目番号[0〜29]
使用例
ESP_SelectInputBox(3);
ボタンボックス操作
void ESP_OpenButtonBox(int x0, int y0, int nx, int ny);
説明
ボタンボックスを出現させます.ボタン数(nx*ny)の上限は256です.
ボタンボックスの大きさを変更するには,ESP_ResizeButtonBox()を使用します.
ボタンボックスが既に存在するとき,この関数は無視されます.
引数
x0,y0:ボタンボックスの左上座標
nx:ボタンの横数
ny:ボタンの縦数
使用例
ESP_OpenButtonBox(10,20,3,3);
int ESP_CloseButtonBox(void);
説明
ボタンボックスを閉じます.
戻り値
0:正常終了
1:ボタンボックスが存在しない
使用例
ESP_CloseButtonBox();
void ESP_ResizeButtonBox(int wx, int wy);
説明
ボタンボックスの大きさを変更します.
ボタンボックスが存在しないとき,この関数は無視されます.
ボタンボックスの大きさに合わせて各ボタンの大きさは自動的に決まります.
引数
wx:ボタンボックスの横幅 (なお, 0...変更しない, -1...デフォルト値)
wy:ボタンボックスの縦幅 (なお, 0...変更しない, -1...デフォルト値)
使用例
ESP_ResizeButtonBox(300,200);
int ESP_GetButtonBox(int i);
説明
ボタンボックスのうち,番号 i のボタンが押された回数を返します.
番号 i のボタンが存在しないとき,この関数は 0 を返します.
この関数を呼び出すと,そのボタンが押された回数は0にクリアされます.
引数
i:ボタン番号[0〜255]
戻り値
ボタンが押された回数
使用例
int n;
n=ESP_GetButtonBox(0);
void ESP_SetButtonBox(int i);
説明
ボタンボックスのうち,番号 i のボタンが押された回数を 1 に設定します.
ボタンが押された状態をプログラムによって作り出すことができます.
番号 i のボタンが存在しないとき,この関数は無視されます.
引数
i:ボタン番号[0〜255]
使用例
ESP_SetButtonBox(0);
void ESP_SetButtonBoxTitle(int i, const char *title);
説明
ボタンボックスの項目名を変更します.
ボタンの横をマウス左ダブルクリックしても,手動で変更することができます.
項目名のデフォルトはボタン番号になっています.
引数
i:ボタン番号[0〜255]
title:タイトル文字列へのポインタ
使用例
ESP_SetButtonBoxTitle(1,"Test 2");
void ESP_ClearButtonBox(void);
説明
すべてのボタンについて押された回数を0にします.
ボタンボックスが存在しないとき,この関数は無視されます.
使用例
ESP_ClearButtonBox();
内部変数
ここで公開する内部変数はすべてESPLIB が内部で使用するグローバル変数です.
むやみに内容を書き換えるとESPLIB が正常に動作しなくなる可能性があるため,通常はこれらの変数の内容を変更しないでください.
unsigned int *ESP_VramPtr[int i];
unsigned char *ESP_VramPtr8[int i];
説明
このポインタ変数は,イメージウィンドウの内容が記憶されている画像領域の先頭アドレスを保持しています.ESP_VramPtr[i]とESP_VramPtr8[i]は型が異なるだけで,アドレス自体は同じです.
32ビットモードのイメージウィンドウでは(幅×高さ×4)バイトの連続領域の先頭アドレスです.
8ビットモードのイメージウィンドウでは(幅×高さ)バイトの連続領域の先頭アドレスです.ただし,ここでの幅は4の倍数に調整されています.例えばイメージの幅が317〜320の場合,内部における連続領域の幅は320です.
画像入力ボードの画像取得関数において,転送先としてこの変数の値を指定すれば,高速な画像表示を行える場合があります.
誤動作の原因になるため値を変更しないでください.
引数
i:イメージウィンドウの番号[0〜255]
戻り値
画像バッファの先頭アドレス
(注)番号 i のイメージウィンドウが存在しない場合,この変数 [i] は使用できません.
内部形式
・32ビットモード
ピクセルの色が並んでいるだけです.
第1バイト [青8ビット]
第2バイト [緑8ビット]
第3バイト [赤8ビット]
第4バイト [ダミー8ビット]
あとは,これの繰り返し.
・8ビットモード
第1バイト [輝度またはカラーコード8ビット]
あとは,これの繰り返し.
HDC esp_iw[int i].memdc;
説明
イメージウィンドウの内容を保持しているメモリデバイスコンテキストのハンドルです.
このハンドルを使うことによって Win32API の描画関数や転送関数が自由に使えるようになります.
誤動作の原因になるため,値を変更しないでください.
引数
i:イメージウィンドウの番号[0〜255]
戻り値
イメージウィンドウ i のメモリデバイスコンテキストのハンドル
(注)番号 i のイメージウィンドウが存在しない場合,この変数 [i] は使用できません.
使用例
SetPixel(esp_iw[0].memdc,10,20,RGB(255,0,0));
ESP_Select(0);
ESP_Update();
int esp_i;
説明
描画対象となるイメージウィンドウの番号を保持しています.
この変数の値を直接変更しても構いませんが,変更した場合 ESP_UnSelect() の正常動作は期待できません.
戻り値
イメージウィンドウの番号[0〜255]
int esp_iw[int i].wx;
int esp_iw[int i].wy;
int esp_iw[int i].bit;
説明
イメージウィンドウの画像サイズやビット数を保持しています.
誤動作の原因になるため値を変更しないでください.
引数
i:イメージウィンドウの番号[0〜255]
戻り値
esp_iw[i].wx:横サイズ(単位:ピクセル)
esp_iw[i].wy:縦サイズ(単位:ピクセル)
esp_iw[i].bit:ビット数[32または8]
(注)番号 i のイメージウィンドウが存在しない場合,これらの変数 [i] の値は不定です.
int esp_twi;
説明
現在選択されているテキストウィンドウの番号を保持しています.
この変数の値を直接変更しても構いませんが,変更した場合 ESP_UnSelectTW() の正常動作は期待できません.
戻り値
テキストウィンドウの番号[0〜255]
HWND esp_mw_hwnd;
HWND esp_iw[int i].hwnd;
HWND esp_tw[int t].hwnd;
HWND esp_ib_hwnd;
HWND esp_bb_hwnd;
説明
ESPLIB の各ウィンドウのハンドル値が格納されている変数です.
誤動作の原因になるため値を変更しないでください.
引数
i:イメージウィンドウの番号[0〜255]
t:テキストウィンドウの番号[0〜255]
戻り値
esp_mw_hwnd:メインウィンドウのハンドル
esp_iw[i].hwnd:イメージウィンドウ i のハンドル
(注)番号 i のイメージウィンドウが存在しない場合,この変数 [i] の値は不定です.
esp_tw[i].hwnd:テキストウィンドウ t のハンドル
(注)番号 t のテキストウィンドウが存在しない場合,この変数 [t] の値は不定です.
esp_ib_hwnd:インプットボックスのハンドル
esp_bb_hwnd:ボタンボックスのハンドル
<関数リファレンス終わり>