**エフェクタ仕様書**

 

1.概要

エフェクタ部品は基本的に PMcEffect という1つの関数からなる.ユーザからエフェクトを行ないたいという要求が送られると,Pmacs本体は,要求されたエフェクタ部品のこの関数を呼び出す.この関数の引数として,処理対象の画像,処理結果の画像を入れるエリア,処理対象となる画像内領域の座標などの情報が部品側に渡される.部品側は渡された情報をもとに画像処理を行ない,処理結果のエリアに格納する.

処理対象領域は,矩形以外の形状になる事もあるが,部品には,処理対象領域に外接する最小の矩形領域が渡される.部品側は,処理対象領域の形状は気にする必要はなく,矩形領域が与えられたものとして処理を行なえばよい.その中で本当に更新が必要な部分かどうかの判定はするのは本体側で行なう.この機構をサポートするために PMsGetColorOnImagePMsSetColorOnImage というAPI関数を用意し,この関数を介して画像更新を行なう事により,部品は領域・マスクの状態を気にする事なく処理する事が出来る.

図1.エフェクト処理におけるデータの流れ

 

2.構成

エフェクタ部品は以下の関数からなる

int PMcEffect(CDIB *in,GRAM32 *out,int x1,int y1,int x2,int y2,int reg,FARPROC *func)

in :入力画像

out :出力画像

x1 :

y1 :

x2 :

y2 :処理対象領域

func:コールバック関数

 

内容:

(x1,y1)-(x2,y2)で囲まれる矩形領域に画像に効果を加える.画像への操作は後述の関数を用いる.

コールバック関数は本体内の関数で,プログレスバーを表示するのに用いる.

 

int PMcChangeParameter(char *pnm,Param *prm)

pnm :変化したパラメータ名

prm :パラメータ情報

 

内容:

パラメータが変化した時呼ばれる.この関数は必ずしも必要ではない.

 

  1. 本体側で用意するAPI関数

int PMsGetColorOnImage(CDIB *img,int x,int y,Pix32 *col)

・画像上の色を取得する

img :画像へのポインタ

x :

y :画像上の座標

col :画像上の色(戻り値)

(戻り値)

TRUE:(x,y)は画像内

FALSE:(x,y)は画像外

 

int PMsSetColorOnImage(GRAM32 *img,int x,int y,Pix32 *col,int reg)

・画像に色をセットする

img :画像へのポインタ

x,y :画像上の座標

col :色値

reg :領域情報

 

char* PMsGetParameter(int kind,int pid);

パラメータ値を得る

kind :パラメータの種類(エフェクタの場合,定数PARAM_EFFECTを指定)

pid :パラメータID

戻り値はすべて文字列で返される

データ定義

typedef union {

unsigned long color; /* カラー値 */

struct {

unsigned char b; /* */

unsigned char g; /* */

unsigned char r; /* */

unsigned char mask; /* マスク・領域 */

}citem;

}Pix32;

 

*注意点

図2.領域指定の例

 

戻る