関数 | |
FHANDLE FVALGAPI | fnFIE_create_region_rect (INT iXS, INT iYS, INT iWidth, INT iHeight) |
長方形リージョンを作成する関数 | |
FHANDLE FVALGAPI | fnFIE_create_region_circle (DPNT_T dpntCenter, DOUBLE dRadius) |
円形リージョンを作成する関数 | |
FHANDLE FVALGAPI | fnFIE_create_region_ellipse (DPNT_T dpntCenter, DOUBLE dMajor, DOUBLE dMinor, DOUBLE dTheta) |
楕円形リージョンを作成する関数 | |
FHANDLE FVALGAPI | fnFIE_create_region_polygon (const DPNT_T *dpntVertex, UINT uiVerNum) |
多角形リージョンを作成する関数 | |
FHANDLE FVALGAPI | fnFIE_create_region_runlength (const F_RUNLENGTH *pRuns, UINT uiRunNum) |
ラン配列によってリージョンを作成 |
FHANDLE FVALGAPI fnFIE_create_region_rect | ( | INT | iXS, | |
INT | iYS, | |||
INT | iWidth, | |||
INT | iHeight | |||
) |
長方形リージョンを作成する関数
長方形リージョンを作成し、作成されたリージョンのハンドルを返します。 iWidth 及び iHeight は画素の中心間距離を表す値として処理されるため、 作成後の画素数には注意が必要です。 たとえば iWidth=2, iHeight=3 にて作成した場合、 作成されるリージョンは横3画素、縦4画素の長方形になります。 また iWidth = 0, iHeight = 0 にて作成した場合は1画素の点リージョンが作成されます。
作成されたリージョンが不要になった後は fnFIE_free_object() にて ハンドルを解放してください。
[in] | iXS | リージョンの左上のX座標 |
[in] | iYS | リージョンの左上のY座標 |
[in] | iWidth | リージョンの横サイズ(0以上) |
[in] | iHeight | リージョンの縦サイズ(0以上) |
正常終了 | 作成されたリージョンのハンドル | |
NULL | 異常終了 |
// エラー処理は省略しているので注意して下さい。 #include "fie.h" #define WIDTH 256 #define HEIGHT 192 VOID create_region_rect() { FHANDLE hdst = NULL; //出力画像 //チャイルド画像 FHANDLE hrgb_r = NULL; //R画像 FHANDLE hrgb_g = NULL; //G画像 FHANDLE hrgb_b = NULL; //B画像 FHANDLE hreg = NULL; //リージョン //描画の際のオフセット量 PNT_T offset; //リージョン INT xs; //リージョンの左上のX座標 INT ys; //リージョンの左上のY座標 INT r_width; //リージョンの横サイズ(0以上) INT r_height; //リージョンの縦サイズ(0以上) //パラメータ設定 xs = 0; ys = 0; r_width = 100; r_height = 70; //出力画像の領域を確保 hdst = fnFIE_img_root_alloc(F_IMG_UC8, 3, WIDTH, HEIGHT); hrgb_r = fnFIE_img_child_alloc_single_ch(hdst, 0, 0, 0, WIDTH, HEIGHT); hrgb_g = fnFIE_img_child_alloc_single_ch(hdst, 1, 0, 0, WIDTH, HEIGHT); hrgb_b = fnFIE_img_child_alloc_single_ch(hdst, 2, 0, 0, WIDTH, HEIGHT); fnFIE_img_clear(hdst, 255); //長方形リージョンを作成する関数 hreg = fnFIE_create_region_rect(xs, ys, r_width, r_height); //オフセット設定 offset.x = (r_width-WIDTH)/2; offset.y = (r_height-HEIGHT)/2; //リージョンを描画する fnFIE_region_decode(hreg, hrgb_g, offset, 0); fnFIE_region_decode(hreg, hrgb_b, offset, 0); //オフセット設定 offset.x -= r_width/2; offset.y -= r_height/2; //リージョンを描画する fnFIE_region_decode(hreg, hrgb_r, offset, 0); fnFIE_region_decode(hreg, hrgb_g, offset, 0); //オフセット設定 offset.x += r_width; offset.y += r_height; //リージョンを描画する fnFIE_region_decode(hreg, hrgb_r, offset, 0); fnFIE_region_decode(hreg, hrgb_b, offset, 0); // 結果画像をPNG形式のファイルとして保存します。 fnFIE_save_png( "result.png", hdst, -1 ); //解放 fnFIE_free_object(hdst); fnFIE_free_object(hrgb_r); fnFIE_free_object(hrgb_g); fnFIE_free_object(hrgb_b); fnFIE_free_object(hreg); } INT main(VOID) { // FIEライブラリの使用前に必ずコールする必要があります。 fnFIE_setup(); create_region_rect(); // 終了処理 fnFIE_teardown(); return 0; }
![]() 処理結果画像 |
FHANDLE FVALGAPI fnFIE_create_region_circle | ( | DPNT_T | dpntCenter, | |
DOUBLE | dRadius | |||
) |
円形リージョンを作成する関数
円形リージョンを作成し、作成されたリージョンのハンドルを返します。 作成される円形リージョンは fnFIE_draw_circle() F_DRAW_FILL_INモード で描画される図形と同一形状になります。
下図に示す円は、中心が(4.0, 4.0)、半径が 2.0 の円リージョンを作成した場合の例です。 なお、与えられたパラメータは四捨五入されて処理されます。 そのため、中心が(3.5, 3.5)、半径が1.5の円と、中心が(4.4, 4.4)、半径が2.4の円は、 下図と同じ円リージョンとなります。 また、半径が0の円は、中心座標1画素のみの点として描画されます。
作成されたリージョンが不要になった後は fnFIE_free_object() にて ハンドルを解放してください。
[in] | dpntCenter | 円形リージョンの円心座標 |
[in] | dRadius | 円形リージョンの半径 |
正常終了 | 作成されたリージョンのハンドル | |
NULL | 異常終了 |
// エラー処理は省略しているので注意して下さい。 #include "fie.h" #define WIDTH 256 #define HEIGHT 192 VOID create_region_circle() { FHANDLE hdst = NULL; //出力画像 //チャイルド画像 FHANDLE hrgb_r = NULL; //R画像 FHANDLE hrgb_g = NULL; //G画像 FHANDLE hrgb_b = NULL; //B画像 FHANDLE hreg = NULL; //リージョン //描画の際のオフセット量 PNT_T offset; //リージョン DPNT_T pnt_center; //円リージョンの円心座標 DOUBLE radius; //円リージョンの半径 //パラメータ設定 pnt_center.x=0; pnt_center.y=0; radius = 40; //出力画像の領域を確保 hdst = fnFIE_img_root_alloc(F_IMG_UC8, 3, WIDTH, HEIGHT); hrgb_r = fnFIE_img_child_alloc_single_ch(hdst, 0, 0, 0, WIDTH, HEIGHT); hrgb_g = fnFIE_img_child_alloc_single_ch(hdst, 1, 0, 0, WIDTH, HEIGHT); hrgb_b = fnFIE_img_child_alloc_single_ch(hdst, 2, 0, 0, WIDTH, HEIGHT); fnFIE_img_clear(hdst, 255); //円形リージョンを作成する関数 hreg = fnFIE_create_region_circle(pnt_center, radius); //オフセット設定 offset.x = -(WIDTH/2); offset.y = -(HEIGHT/2); //リージョンを描画する fnFIE_region_decode(hreg, hrgb_g, offset, 0); fnFIE_region_decode(hreg, hrgb_b, offset, 0); //オフセット設定 offset.x -= (INT)radius; offset.y -= (INT)radius; //リージョンを描画する fnFIE_region_decode(hreg, hrgb_r, offset, 0); fnFIE_region_decode(hreg, hrgb_g, offset, 0); //オフセット設定 offset.x += (INT)radius*2; offset.y += (INT)radius*2; //リージョンを描画する fnFIE_region_decode(hreg, hrgb_r, offset, 0); fnFIE_region_decode(hreg, hrgb_b, offset, 0); // 結果画像をPNG形式のファイルとして保存します。 fnFIE_save_png( "result.png", hdst, -1 ); //解放 fnFIE_free_object(hdst); fnFIE_free_object(hrgb_r); fnFIE_free_object(hrgb_g); fnFIE_free_object(hrgb_b); fnFIE_free_object(hreg); } INT main(VOID) { // FIEライブラリの使用前に必ずコールする必要があります。 fnFIE_setup(); create_region_circle(); // 終了処理 fnFIE_teardown(); return 0; }
![]() 処理結果画像 |
FHANDLE FVALGAPI fnFIE_create_region_ellipse | ( | DPNT_T | dpntCenter, | |
DOUBLE | dMajor, | |||
DOUBLE | dMinor, | |||
DOUBLE | dTheta | |||
) |
楕円形リージョンを作成する関数
楕円形リージョンを作成し、作成されたリージョンのハンドルを返します。 作成される楕円リージョンは fnFIE_draw_ellipse() F_DRAW_FILL_INモード で描画される図形と同一形状になります。
下図に示す楕円は、中心が(5.0, 4.0)、長軸半径が3.0、短軸半径が2.0の楕円リージョンを作成した場合の例です。 また、長軸半径と短軸半径をともに0とした場合、1点のリージョンが作成されます。
作成されたリージョンが不要になった後は fnFIE_free_object() にて ハンドルを解放してください。
[in] | dpntCenter | 楕円リージョンの円心座標 |
[in] | dMajor | 楕円長軸の半径 |
[in] | dMinor | 楕円短軸の半径 |
[in] | dTheta | 楕円回転角(ラジアン) |
正常終了 | 作成されたリージョンのハンドル | |
NULL | 異常終了 |
// エラー処理は省略しているので注意して下さい。 #include "fie.h" #include <math.h> #define WIDTH 256 #define HEIGHT 192 VOID create_region_ellipse() { FHANDLE hdst = NULL; //出力画像 //チャイルド画像 FHANDLE hrgb_r = NULL; //R画像 FHANDLE hrgb_g = NULL; //G画像 FHANDLE hrgb_b = NULL; //B画像 FHANDLE hreg = NULL; //リージョン //描画 PNT_T offset; //リージョン DPNT_T pnt_center; //楕円リージョンの円心座標 DOUBLE major; //楕円長軸の半径 DOUBLE minor; //楕円短軸の半径 DOUBLE theta; //楕円回転角(ラジアン) //パラメータ設定 pnt_center.x=0; pnt_center.y=0; major = 25; minor = 50; theta = PI/4; //出力画像の領域を確保 hdst = fnFIE_img_root_alloc(F_IMG_UC8, 3, WIDTH, HEIGHT); hrgb_r = fnFIE_img_child_alloc_single_ch(hdst, 0, 0, 0, WIDTH, HEIGHT); hrgb_g = fnFIE_img_child_alloc_single_ch(hdst, 1, 0, 0, WIDTH, HEIGHT); hrgb_b = fnFIE_img_child_alloc_single_ch(hdst, 2, 0, 0, WIDTH, HEIGHT); fnFIE_img_clear(hdst, 255); //楕円リージョンを作成する関数 hreg = fnFIE_create_region_ellipse(pnt_center, major, minor, theta); //オフセット設定 offset.x = -(WIDTH/2); offset.y = -(HEIGHT/2); //リージョンを描画する fnFIE_region_decode(hreg, hrgb_g, offset, 0); fnFIE_region_decode(hreg, hrgb_b, offset, 0); //オフセット設定 offset.x -= (INT)sqrt((major*major)+(minor*minor)); offset.y -= (INT)sqrt((major*major)+(minor*minor)); //リージョンを描画する fnFIE_region_decode(hreg, hrgb_r, offset, 0); fnFIE_region_decode(hreg, hrgb_g, offset, 0); //オフセット設定 offset.x += ((INT)sqrt((major*major)+(minor*minor)))*2; offset.y += ((INT)sqrt((major*major)+(minor*minor)))*2; //リージョンを描画する fnFIE_region_decode(hreg, hrgb_r, offset, 0); fnFIE_region_decode(hreg, hrgb_b, offset, 0); // 結果画像をPNG形式のファイルとして保存します。 fnFIE_save_png( "result.png", hdst, -1 ); //解放 fnFIE_free_object(hdst); fnFIE_free_object(hrgb_r); fnFIE_free_object(hrgb_g); fnFIE_free_object(hrgb_b); fnFIE_free_object(hreg); } INT main(VOID) { // FIEライブラリの使用前に必ずコールする必要があります。 fnFIE_setup(); create_region_ellipse(); // 終了処理 fnFIE_teardown(); return 0; }
![]() 処理結果画像 |
FHANDLE FVALGAPI fnFIE_create_region_polygon | ( | const DPNT_T * | dpntVertex, | |
UINT | uiVerNum | |||
) |
多角形リージョンを作成する関数
多角形リージョンを作成し、作成されたリージョンのハンドルを返します。
与えられた頂点を、Pn = { p(0),p(1),…,p(n-2),p(n-1)} とし、 これらの頂点により作成される多角形のリージョンを作成します。 p(0)と p(n-1)は、接続しているとして処理します。 ただし、頂点数が1の場合は点の、2の場合は線状のリージョンとなります。
作成されるリージョンは fnFIE_draw_polygon() F_DRAW_FILL_IN モード で描画される図形とほぼ同一形状になります。 頂点の集合が占める縦横のサイズがI32_MAXより充分に小さくない場合に一部異なります。
作成されたリージョンが不要になった後は fnFIE_free_object() にて ハンドルを解放してください。
[in] | dpntVertex | 頂点の集合 |
[in] | uiVerNum | 頂点数 |
正常終了 | 作成されたリージョンのハンドル | |
NULL | 異常終了 |
// エラー処理は省略しているので注意して下さい。 #include "fie.h" #define WIDTH 256 #define HEIGHT 192 VOID create_region_polygon() { FHANDLE hdst = NULL; //出力画像 //チャイルド画像 FHANDLE hrgb_r = NULL; //R画像 FHANDLE hrgb_g = NULL; //G画像 FHANDLE hrgb_b = NULL; //B画像 FHANDLE hreg = NULL; //リージョン //描画 PNT_T offset; //リージョン DPNT_T pnt_vertex[6]; //頂点の集合 UINT ver_num; //頂点数 //パラメータ設定 pnt_vertex[0].x = 0; pnt_vertex[0].y = 0; pnt_vertex[1].x = 60; pnt_vertex[1].y = 0; pnt_vertex[2].x = 40; pnt_vertex[2].y = 30; pnt_vertex[3].x = 60; pnt_vertex[3].y = 60; pnt_vertex[4].x = 0; pnt_vertex[4].y = 60; pnt_vertex[5].x = 20; pnt_vertex[5].y = 30; ver_num = 6; //頂点数6 //出力画像の領域を確保 hdst = fnFIE_img_root_alloc(F_IMG_UC8, 3, WIDTH, HEIGHT); hrgb_r = fnFIE_img_child_alloc_single_ch(hdst, 0, 0, 0, WIDTH, HEIGHT); hrgb_g = fnFIE_img_child_alloc_single_ch(hdst, 1, 0, 0, WIDTH, HEIGHT); hrgb_b = fnFIE_img_child_alloc_single_ch(hdst, 2, 0, 0, WIDTH, HEIGHT); fnFIE_img_clear(hdst, 255); //多角形リージョンを作成する関数 hreg = fnFIE_create_region_polygon(pnt_vertex, ver_num); //オフセット設定 offset.x = ((INT)pnt_vertex[1].x-WIDTH)/2; offset.y = ((INT)pnt_vertex[3].y-HEIGHT)/2; //リージョンを描画する fnFIE_region_decode(hreg, hrgb_g, offset, 0); fnFIE_region_decode(hreg, hrgb_b, offset, 0); //オフセット設定 offset.x -= (INT)pnt_vertex[1].x; offset.y -= (INT)pnt_vertex[3].y; //リージョンを描画する fnFIE_region_decode(hreg, hrgb_r, offset, 0); fnFIE_region_decode(hreg, hrgb_g, offset, 0); //オフセット設定 offset.x += (INT)pnt_vertex[1].x*2; offset.y += (INT)pnt_vertex[3].y*2; //リージョンを描画する fnFIE_region_decode(hreg, hrgb_r, offset, 0); fnFIE_region_decode(hreg, hrgb_b, offset, 0); // 結果画像をPNG形式のファイルとして保存します。 fnFIE_save_png( "result.png", hdst, -1 ); //解放 fnFIE_free_object(hdst); fnFIE_free_object(hrgb_r); fnFIE_free_object(hrgb_g); fnFIE_free_object(hrgb_b); fnFIE_free_object(hreg); } INT main(VOID) { // FIEライブラリの使用前に必ずコールする必要があります。 fnFIE_setup(); create_region_polygon(); // 終了処理 fnFIE_teardown(); return 0; }
![]() 処理結果画像 |
FHANDLE FVALGAPI fnFIE_create_region_runlength | ( | const F_RUNLENGTH * | pRuns, | |
UINT | uiRunNum | |||
) |
ラン配列によってリージョンを作成
入力ラン配列によって新たにリージョンを作成します。 生成されるリージョンオブジェクトには入力ラン pRuns の内容がコピーされます。 pRuns が生成されるリージョンオブジェクトに関連づけられるわけではありません。
作成したリージョンオブジェクトは不要になったら fnFIE_free_object() にて解放してください。
[in] | pRuns | ラン配列のポインタ |
[in] | uiRunNum | 配列中のランの数 |