リージョン作成
[リージョン処理]


関数

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 異常終了
参照:
fnFIE_draw_rect(), fnFIE_free_object()
使用例:
// エラー処理は省略しているので注意して下さい。
#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;
}
処理結果例:
以下は, fnFIE_region_decode()にてリージョンを画像に描画した結果です。
region_rect.png

処理結果画像

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画素のみの点として描画されます。

draw_circle.png

作成されたリージョンが不要になった後は fnFIE_free_object() にて ハンドルを解放してください。

引数:
[in] dpntCenter 円形リージョンの円心座標
[in] dRadius 円形リージョンの半径
戻り値:
正常終了 作成されたリージョンのハンドル
NULL 異常終了
参照:
fnFIE_draw_circle(), fnFIE_free_object()
使用例:
// エラー処理は省略しているので注意して下さい。
#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;
}
処理結果例:
以下は, fnFIE_region_decode()にてリージョンを画像に描画した結果です。
region_circle.png

処理結果画像

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点のリージョンが作成されます。

draw_ellipse.png

作成されたリージョンが不要になった後は fnFIE_free_object() にて ハンドルを解放してください。

引数:
[in] dpntCenter 楕円リージョンの円心座標
[in] dMajor 楕円長軸の半径
[in] dMinor 楕円短軸の半径
[in] dTheta 楕円回転角(ラジアン)
戻り値:
正常終了 作成されたリージョンのハンドル
NULL 異常終了
参照:
fnFIE_draw_ellipse(), fnFIE_free_object()
使用例:
// エラー処理は省略しているので注意して下さい。
#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;
}
処理結果例:
以下は, fnFIE_region_decode()にてリージョンを画像に描画した結果です。
region_ellipse.png

処理結果画像

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 異常終了
参照:
fnFIE_draw_polygon(), fnFIE_free_object()
使用例:
// エラー処理は省略しているので注意して下さい。
#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;
}
処理結果例:
以下は, fnFIE_region_decode()にてリージョンを画像に描画した結果です。
region_polygon.png

処理結果画像

FHANDLE FVALGAPI fnFIE_create_region_runlength ( const F_RUNLENGTH pRuns,
UINT  uiRunNum 
)

ラン配列によってリージョンを作成

入力ラン配列によって新たにリージョンを作成します。 生成されるリージョンオブジェクトには入力ラン pRuns の内容がコピーされます。 pRuns が生成されるリージョンオブジェクトに関連づけられるわけではありません。

作成したリージョンオブジェクトは不要になったら fnFIE_free_object() にて解放してください。

引数:
[in] pRuns ラン配列のポインタ
[in] uiRunNum 配列中のランの数
戻り値:
正常終了した場合は作成されたリージョンのハンドルを返します。 異常終了した場合はNULLを返します。


Documentation copyright © 2009-2024 FAST Corporation.
Generated on Fri Aug 9 16:38:47 2024 for FIEライブラリ by doxygen 1.5.6-FASTSP-p2